-
Notifications
You must be signed in to change notification settings - Fork 0
/
upload.go
135 lines (116 loc) · 2.85 KB
/
upload.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
package file
import (
"bytes"
"github.com/EliseCaro/pan/utils/httpclient"
"io"
"io/ioutil"
"log"
"mime/multipart"
"net/http"
"os"
"path/filepath"
)
type Uploader struct {
Url string
FilePath string
}
//NewFileUploader
func NewFileUploader(url, filePath string) *Uploader {
return &Uploader{
Url: url,
FilePath: filePath,
}
}
// 上传文件
func (u *Uploader) Upload() ([]byte, error) {
ret := []byte("")
bodyBuf := &bytes.Buffer{}
bodyWriter := multipart.NewWriter(bodyBuf)
//"file" 为接收时定义的参数名
fileWriter, err := bodyWriter.CreateFormFile("file", filepath.Base(u.FilePath))
if err != nil {
log.Println("error writing to buffer, err:", err)
return ret, err
}
//打开文件
fh, err := os.Open(u.FilePath)
if err != nil {
log.Println("error opening file, err:", err)
return ret, err
}
defer fh.Close()
//iocopy
_, err = io.Copy(fileWriter, fh)
if err != nil {
return ret, err
}
contentType := bodyWriter.FormDataContentType()
bodyWriter.Close()
//提交请求
request, err := http.NewRequest("POST", u.Url, bodyBuf)
if err != nil {
return ret, err
}
request.Header.Add("Content-Type", contentType)
//随机设置一个User-Agent
userAgent := httpclient.GetRandomUserAgent()
request.Header.Set("User-Agent", userAgent)
//处理返回结果
client := &http.Client{}
resp, err := client.Do(request)
//打印接口返回信息
if err != nil {
log.Println("request uploadUrl failed, err:", err)
return ret, err
}
defer resp.Body.Close()
respBody, err := ioutil.ReadAll(resp.Body)
if err != nil {
return ret, err
}
//根据实际需要,返回相应的信息
return respBody, nil
}
//直接通过字节上传
func (u *Uploader) UploadByByte(fileByte []byte) ([]byte, error) {
ret := []byte("")
bodyBuf := &bytes.Buffer{}
bodyWriter := multipart.NewWriter(bodyBuf)
//"file" 为接收时定义的参数名
fileWriter, err := bodyWriter.CreateFormFile("file", filepath.Base(u.FilePath))
if err != nil {
log.Println("error writing to buffer, err:", err)
return ret, err
}
//iocopy
_, err = io.Copy(fileWriter, bytes.NewReader(fileByte))
if err != nil {
return ret, err
}
contentType := bodyWriter.FormDataContentType()
bodyWriter.Close()
//提交请求
request, err := http.NewRequest("POST", u.Url, bodyBuf)
if err != nil {
return ret, err
}
request.Header.Add("Content-Type", contentType)
//随机设置一个User-Agent
userAgent := httpclient.GetRandomUserAgent()
request.Header.Set("User-Agent", userAgent)
//处理返回结果
client := &http.Client{}
resp, err := client.Do(request)
//打印接口返回信息
if err != nil {
log.Println("上传错误信息:", err)
return ret, err
}
defer resp.Body.Close()
respBody, err := ioutil.ReadAll(resp.Body)
if err != nil {
return ret, err
}
//根据实际需要,返回相应的信息
return respBody, nil
}