融合接口
SDK提供封装好的融合接口s3manager.Uploader,方便用户实现分片上传的功能。
代码示例:
type TransDemo struct {
uploader *s3manager.Uploader
}
func NewTransDemo() *TransDemo {
region := "cn"
config := &aws.Config{
Credentials: credentials.NewStaticCredentials(S3AccessKey, S3SecretKey, ""),
Endpoint: aws.String(S3EndPoint),
S3ForcePathStyle: aws.Bool(true),
DisableSSL: aws.Bool(true),
//LogLevel: aws.LogLevel(aws.LogDebug),
Region: aws.String(region),
HTTPClient: &http.Client{
Transport: &http.Transport{
MaxConnsPerHost: 1000,
},
},
}
sess := session.Must(session.NewSession(config))
p := &TransDemo{
uploader: s3manager.NewUploader(sess),
}
return p
}
func (p *TransDemo) upload() {
key := "ExampleObject.txt"
file, _ := os.Open("E:/ExampleObject.txt")
_, err := p.uploader.Upload(&s3manager.UploadInput{
Bucket: aws.String(S3Bucket),
Key: aws.String(key),
Body: file,
ACL: aws.String("private"), // 可以设置公共读public-read, 默认private
ContentType: aws.String("application/octet-stream"), // 默认application/octet-stream
})
if err != nil {
fmt.Println("err, ", err)
return
}
}
UploadInput可设置的参数如下:
参数 | 类型 | 说明 | 是否必要 |
---|---|---|---|
ACL | *string | 配置上传对象的预定义的标准ACL信息,例如private,public-read,public-read-write等。 | 否 |
Body | io.ReadSeeker | 对象的数据。 | 是 |
Bucket | *string | 执行本操作的桶名称。 | 是 |
Key | *string | 上传文件到媒体存储服务后对应的key。PutObject操作支持将文件上传至文件夹,如需要将对象上传至"/folder"文件下,只需要设置Key="/folder/{exampleKey}“即可。 | 是 |
Metadata | map[string]*string | 对象的元数据信息。 | 否 |
Tagging | *string | 对象的标签信息,必须是URL请求参数的形式。例如,“Key1=Value1”。 | 否 |
Content-Type用于标识文件的资源类型,比如image/png
, image/jpg
是图片类型,video/mpeg
, video/mp4
是视频类型,text/plain
, text/html
是文本类型, 浏览器针对不同的Content-Type会有不同的操作,比如图片类型可以预览,视频类型可以播放,文本类型可以直接打开。application/octet-stream
类型会直接打开下载窗口。
有些用户反馈图片和视频无法预览的问题,主要就是Content-Type没有正确设置导致的;Content-Type参数需要用户主动设置,默认是application/octet-stream
。在go sdk中,可以根据对象key值后缀扩展名来决定文件的Content-Type,参考代码如下,
func mimeType(key string) string {
ext := path.Ext(key)
if ext == "" {
return ""
}
return mime.TypeByExtension(ext)
}