package upload // Author: Yun // Version: 2023年6月29日13:45:10 // Description: 向一个URL上传服务器本地文件 import ( "bytes" "fmt" "io" "mime/multipart" "net/http" "os" ) // 表单上传 func FormUpload(url, filePath string) ([]byte, error) { // 文件上传 bodyBuf := bytes.NewBufferString("") bodyWriter := multipart.NewWriter(bodyBuf) _, err := bodyWriter.CreateFormFile("file", filePath) if err != nil { return nil, err } fh, err := os.Open(filePath) if err != nil { return nil, err } boundary := bodyWriter.Boundary() closeBuf := bytes.NewBufferString(fmt.Sprintf("\r\n--%s--\r\n", boundary)) requestReader := io.MultiReader(bodyBuf, fh, closeBuf) fi, err := fh.Stat() if err != nil { return nil, err } req, err := http.NewRequest("POST", url, requestReader) if err != nil { return nil, err } req.Header.Add("Content-Type", "multipart/form-data; boundary="+boundary) req.ContentLength = fi.Size() + int64(bodyBuf.Len()) + int64(closeBuf.Len()) res, err := http.DefaultClient.Do(req) if err != nil { return nil, err } defer res.Body.Close() return io.ReadAll(res.Body) }