You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

123 lines
2.7 KiB

package upload
import (
"bytes"
"encoding/json"
"errors"
"io"
"io/ioutil"
"mime/multipart"
"net/http"
"strings"
)
const (
BaseUrl = "http://file-upload-test.mangguonews.com/upload"
ImgSuffix = "jpg,jpeg,png,gif,tif,tiff,bmp,"
Type = "graph,video,doc,"
)
type Response struct {
Data struct {
File string `json:"file"`
Hash string `json:"hash"`
ScaleImage string `json:"scaleImage"`
UploadFileName string `json:"uploadFileName"`
BaseUrl string `json:"baseUrl"` //给前端返回另加的参数
} `json:"data"`
Message struct {
Desc string `json:"desc"`
Error interface{} `json:"error"`
} `json:"message"`
Status bool `json:"status"`
}
type ParamsUpload struct {
File *multipart.FileHeader `form:"file"` //文件
Type string `form:"type"` //类型 img:图片
ParamsGet
}
type ParamsGet struct {
Width string `form:"width"`
Height string `form:"height"`
Scale string `form:"scale"`
}
func createMgNewsUploadRequest(file multipart.File, params map[string]string, fileName string) (*http.Request, error) {
var (
err error
body *bytes.Buffer
w *multipart.Writer
writer io.Writer
req *http.Request
contentType string
)
body = &bytes.Buffer{}
w = multipart.NewWriter(body)
contentType = w.FormDataContentType()
for key, val := range params {
_ = w.WriteField(key, val)
}
if file != nil {
writer, err = w.CreateFormFile("file", fileName)
_, err = io.Copy(writer, file)
if err != nil {
return nil, err
}
}
w.Close()
req, err = http.NewRequest(http.MethodPost, BaseUrl, body)
req.Header.Set("Content-Type", contentType)
return req, err
}
func MgNewsUpload(file multipart.File, pm map[string]string, fileName string) (respData Response, err error) {
var (
client *http.Client
req *http.Request
resp *http.Response
resBody []byte
)
client = &http.Client{}
req, err = createMgNewsUploadRequest(file, pm, fileName)
if err != nil {
return
}
resp, _ = client.Do(req)
defer resp.Body.Close()
resBody, err = ioutil.ReadAll(resp.Body)
if err != nil {
return
}
if resp.StatusCode != 200 {
err = errors.New("上传失败")
return
}
//fmt.Println(string(resBody))
err = json.Unmarshal(resBody, &respData)
if err != nil {
return
}
return
}
func CheckType(t string) bool {
if strings.Index(Type, strings.ToLower(t)+",") >= 0 {
return true
}
return false
}
func CheckFileSuffix(fileName string, t string) bool {
var suffix string
suffix = fileName[(strings.LastIndex(fileName, "."))+1:]
if t == "graph" {
if strings.Index(ImgSuffix, strings.ToLower(suffix)+",") >= 0 {
return true
}
} else {
return false
}
return false
}