Files

51 lines
1.2 KiB
Go
Raw Permalink Normal View History

2023-09-16 20:14:20 +08:00
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)
}