/
server_form_upload.go
87 lines (78 loc) · 2.79 KB
/
server_form_upload.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
package XQiniuOss
import (
"bytes"
"context"
"github.com/qiniu/api.v7/v7/storage"
)
func (client *QnClient) FormUploadWithLocalFile(fileKey, localFilePath string) (storage.PutRet, error) {
return client.FormUploadWithLocalFileToBucket(client.cfg.DefaultBucket, fileKey, localFilePath)
}
/*
表单上传
@param bucket string 指定上传的bucket
@param fileKey string 文件唯一key
@param localFilePath string 本地文件路径
*/
func (client *QnClient) FormUploadWithLocalFileToBucket(bucket, fileKey, localFilePath string) (storage.PutRet, error) {
putPolicy := storage.PutPolicy{
Scope: bucket,
ReturnBody: `{"key":"$(key)","hash":"$(etag)","fsize":$(fsize),"bucket":"$(bucket)","name":"$(x:name)"}`,
Expires: uint64(client.cfg.UpTokenExpires),
MimeLimit: client.cfg.MimeLimit,
FsizeMin: int64(client.cfg.FsizeMin),
FsizeLimit: int64(client.cfg.FsizeMax),
}
upToken := putPolicy.UploadToken(client.mac)
cfg := storage.Config{}
// 空间对应的机房
cfg.Zone = &storage.ZoneHuanan
// 是否使用https域名
cfg.UseHTTPS = client.cfg.UseHTTPS
// 上传是否使用CDN上传加速
cfg.UseCdnDomains = client.cfg.UseCdnDomains
// 构建表单上传的对象
formUploader := storage.NewFormUploader(&cfg)
ret := storage.PutRet{}
// 可选配置
putExtra := storage.PutExtra{
// Params: map[string]string{
// "x:name": "github logo",
// },
}
err := formUploader.PutFile(context.Background(), &ret, upToken, fileKey, localFilePath, &putExtra)
return ret, err
}
func (client *QnClient) FormUploadWithByteSlice(fileKey string, data []byte) (storage.PutRet, error) {
return client.FormUploadWithByteSliceToBucket(client.cfg.DefaultBucket, fileKey, data)
}
// 字节数组上传
func (client *QnClient) FormUploadWithByteSliceToBucket(bucket, fileKey string, data []byte) (storage.PutRet, error) {
putPolicy := storage.PutPolicy{
Scope: bucket,
ReturnBody: `{"key":"$(key)","hash":"$(etag)","fsize":$(fsize),"bucket":"$(bucket)","name":"$(x:name)"}`,
Expires: uint64(client.cfg.UpTokenExpires),
MimeLimit: client.cfg.MimeLimit,
FsizeMin: int64(client.cfg.FsizeMin),
FsizeLimit: int64(client.cfg.FsizeMax),
}
upToken := putPolicy.UploadToken(client.mac)
cfg := storage.Config{}
// 空间对应的机房
cfg.Zone = &storage.ZoneHuanan
// 是否使用https域名
cfg.UseHTTPS = client.cfg.UseHTTPS
// 上传是否使用CDN上传加速
cfg.UseCdnDomains = client.cfg.UseCdnDomains
// 构建表单上传的对象
formUploader := storage.NewFormUploader(&cfg)
ret := storage.PutRet{}
// 可选配置
putExtra := storage.PutExtra{
// Params: map[string]string{
// "x:name": "github logo",
// },
}
dataLen := int64(len(data))
err := formUploader.Put(context.Background(), &ret, upToken, fileKey, bytes.NewReader(data), dataLen, &putExtra)
return ret, err
}