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
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
|
|
}
|
|
|