S3上传代码用例-golang
时间:2022-05-05
本文章向大家介绍S3上传代码用例-golang,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
S3上传用例-golang
使用AWS-SDk-golang实现文件上传,支持大文件并发,注意只支持AWS4签名,因此ceph的jewel以上版本才可以用。
package main
import (
"fmt"
"os"
"github.com/aws/aws-sdk-go/aws"
"github.com/aws/aws-sdk-go/aws/credentials"
"github.com/aws/aws-sdk-go/service/s3/s3manager"
"github.com/aws/aws-sdk-go/aws/session"
"github.com/aws/aws-sdk-go/service/s3"
)
func main() {
bucket := aws.String("") //bucket名称
key := aws.String("testobject") //object keyname
access_key := ""
secret_key := ""
end_point := "http://s3.nie.netease.com" //endpoint设置,不要动
myContentType := aws.String("application/zip") //content-type设置
myACL := aws.String("public-read") //acl 设置
metadata_key := "udf-metadata" //自定义Metadata key
metadata_value := "abc" //自定义Metadata value
myMetadata := map[string]*string{
metadata_key: &metadata_value,
}
// Configure to use S3 Server
s3Config := &aws.Config{
Credentials: credentials.NewStaticCredentials(access_key, secret_key, ""),
Endpoint: aws.String(end_point),
Region: aws.String("us-east-1"),
DisableSSL: aws.Bool(true),
S3ForcePathStyle: aws.Bool(false), //virtual-host style方式,不要修改
}
newSession := session.New(s3Config)
s3Client := s3.New(newSession)
cparams := &s3.HeadBucketInput{
Bucket: bucket, // Required
}
_, err := s3Client.HeadBucket(cparams)
if err != nil {
fmt.Println(err.Error())
return
}
uploader := s3manager.NewUploader(newSession)
filename := "/tmp/demo.pdf" //上传文件路径
f, err := os.Open(filename)
if err != nil {
fmt.Errorf("failed to open file %q, %v", filename, err)
return
}
// Upload the file to S3.
result, err := uploader.Upload(&s3manager.UploadInput{
Bucket: bucket,
Key: key,
Body: f,
ContentType: myContentType,
ACL: myACL,
Metadata: myMetadata,
},func(u *s3manager.Uploader) {
u.PartSize = 10 * 1024 * 1024 // 分块大小,当文件体积超过10M开始进行分块上传
u.LeavePartsOnError = true
u.Concurrency = 3}) //并发数
if err != nil {
fmt.Printf("Failed to upload data to %s/%s, %sn", *bucket, *key, err.Error())
return
}
fmt.Printf("file uploaded to, %sn", result.Location)
down_file := "/tmp/down_file.pdf" //下载路径
file, err := os.Create(down_file)
if err != nil {
fmt.Println("Failed to create file", err)
return
}
defer file.Close()
downloader := s3manager.NewDownloader(newSession)
numBytes, err := downloader.Download(file,
&s3.GetObjectInput{
Bucket: bucket,
Key: key,
})
if err != nil {
fmt.Println("Failed to download file", err)
return
}
fmt.Println("Downloaded file", file.Name(), numBytes, "bytes")
}
- WCF服务端运行时架构体系详解[下篇]
- python和C语言混编的几种方式
- 通过“四大行为”对WCF的扩展[实例篇]
- 古中国数学家的计算力真是惊人
- 基于Apache Spark机器学习的客户流失预测
- 数据库连接字符串的处理方法!加密解密连接字符串。
- ASP.net实现无扩展名的URL重写。简单、方便、无需ISAPI。
- 通过自定义ServiceHost实现对WCF的扩展[实例篇]
- 通过自定义ServiceHost实现对WCF的扩展[原理篇]
- python使用rsa库做公钥解密(网上别处找不到)
- 通过“四大行为”对WCF的扩展[原理篇]
- WCF客户端运行时架构体系详解[下篇]
- WCF客户端运行时架构体系详解[上篇]
- WCF服务端运行时架构体系详解[续篇]
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- LeetCode176——第二高的薪水
- 快速学习-Saturn QuickStart
- 快速学习-开发你的作业
- 理解Spring中的IoC和DI
- 快速学习-Saturn性能测试报告
- Java源码系列1——ArrayList
- 【Kubernetes】自定义资源CRDs不支持fieldselector
- Cypress系列(48)- and() 命令详解
- Java源码系列2——HashMap
- 快速学习-Saturn Console部署
- MySQL的各种日志
- 本地机器如何访问服务器上的docker容器内的tensorboard?
- MySQL是如何实现可重复读的?
- Java源码系列4——HashMap扩容时究竟对链表和红黑树做了什么?
- 如何理解被 protected 修饰的成员变量?