mirror of
https://github.com/silenceper/wechat.git
synced 2026-02-14 17:52:27 +08:00
add stream_upload_source
This commit is contained in:
45
util/http.go
45
util/http.go
@@ -13,6 +13,7 @@ import (
|
||||
"mime/multipart"
|
||||
"net/http"
|
||||
"os"
|
||||
"path"
|
||||
|
||||
"golang.org/x/crypto/pkcs12"
|
||||
)
|
||||
@@ -146,24 +147,57 @@ func PostJSONWithRespContentType(uri string, obj interface{}) ([]byte, string, e
|
||||
return responseData, contentType, err
|
||||
}
|
||||
|
||||
// PostFileByStream 上传文件
|
||||
func PostFileByStream(fieldName, fileName, uri string, byteData []byte) ([]byte, error) {
|
||||
fields := []MultipartFormField{
|
||||
{
|
||||
IsFile: false,
|
||||
Fieldname: fieldName,
|
||||
Filename: fileName,
|
||||
Value: byteData,
|
||||
},
|
||||
}
|
||||
return PostMultipartForm(fields, uri)
|
||||
}
|
||||
|
||||
// GetFileSourceByURL 从给定的 URL 获取文件名和文件字节数据
|
||||
func GetFileSourceByURL(url string) (filename string, byteData []byte, err error) {
|
||||
// 获取文件名
|
||||
filename = path.Base(url)
|
||||
// 获取资源
|
||||
resp, err := http.Get(url)
|
||||
if err != nil {
|
||||
err = fmt.Errorf("get resp error: %v", err)
|
||||
return
|
||||
}
|
||||
byteData, err = io.ReadAll(resp.Body)
|
||||
defer func() { _ = resp.Body.Close() }()
|
||||
if err != nil {
|
||||
err = fmt.Errorf("read resp error: %v", err)
|
||||
return
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
// PostFile 上传文件
|
||||
func PostFile(fieldName, filename, uri string) ([]byte, error) {
|
||||
func PostFile(fieldName, directory, uri string) ([]byte, error) {
|
||||
fields := []MultipartFormField{
|
||||
{
|
||||
IsFile: true,
|
||||
Fieldname: fieldName,
|
||||
Filename: filename,
|
||||
Directory: directory,
|
||||
},
|
||||
}
|
||||
return PostMultipartForm(fields, uri)
|
||||
}
|
||||
|
||||
// PostFileFromReader 上传文件,从 io.Reader 中读取
|
||||
func PostFileFromReader(filedName, fileName, uri string, reader io.Reader) ([]byte, error) {
|
||||
func PostFileFromReader(filedName, directory, fileName, uri string, reader io.Reader) ([]byte, error) {
|
||||
fields := []MultipartFormField{
|
||||
{
|
||||
IsFile: true,
|
||||
Fieldname: filedName,
|
||||
Directory: directory,
|
||||
Filename: fileName,
|
||||
FileReader: reader,
|
||||
},
|
||||
@@ -176,6 +210,7 @@ type MultipartFormField struct {
|
||||
IsFile bool
|
||||
Fieldname string
|
||||
Value []byte
|
||||
Directory string
|
||||
Filename string
|
||||
FileReader io.Reader
|
||||
}
|
||||
@@ -197,7 +232,7 @@ func PostMultipartForm(fields []MultipartFormField, uri string) (respBody []byte
|
||||
}
|
||||
|
||||
if field.FileReader == nil {
|
||||
fh, e := os.Open(field.Filename)
|
||||
fh, e := os.Open(field.Directory)
|
||||
if e != nil {
|
||||
err = fmt.Errorf("error opening file , err=%v", e)
|
||||
return
|
||||
@@ -213,7 +248,7 @@ func PostMultipartForm(fields []MultipartFormField, uri string) (respBody []byte
|
||||
}
|
||||
}
|
||||
} else {
|
||||
partWriter, e := bodyWriter.CreateFormField(field.Fieldname)
|
||||
partWriter, e := bodyWriter.CreateFormFile(field.Fieldname, field.Filename)
|
||||
if e != nil {
|
||||
err = e
|
||||
return
|
||||
|
||||
Reference in New Issue
Block a user