AWS3文件上传 golang 客户端
AWS3文件上传 golang 客户端
- 实现类
package utilsimport ("bufio""bytes""github.com/aws/aws-sdk-go/aws""github.com/aws/aws-sdk-go/aws/credentials""github.com/aws/aws-sdk-go/aws/session""github.com/aws/aws-sdk-go/service/s3"tsgutils "github.com/typa01/go-utils"
)type AmazonClient struct {Region stringAccessKeyID string // idSecretKey string // secretBucketName stringUrlMain stringUrlFolder string // format "/operation/upload/jinhaiyun/"FileType string//optionsToken stringACL stringContentType string// operatte outcomeSession *session.SessionFilePath string // after upload, this file path will exist , which is the internal path, not include bucket
}type ClientOpt struct {//ACL: 权限枚举 https://docs.aws.amazon.com/AmazonS3/latest/userguide/acl-overview.html#canned-aclACL stringContentType stringToken string
}type Option func(ops *ClientOpt)//For access controller
func WithAcl(acl string) Option {return func(ops *ClientOpt) {ops.ACL = acl}
}func WithContentType(contentType string) Option {return func(ops *ClientOpt) {ops.ContentType = contentType}
}func WithToken(token string) Option {return func(ops *ClientOpt) {ops.Token = token}
}
func NewAmazonClient(region, accessKeyID, secretKey, bucketName, urlMain, urlFolder,fileType string, options ...Option) *AmazonClient {optionsItem := new(ClientOpt)for i := range options {options[i](optionsItem)}client := new(AmazonClient)client.ACL = optionsItem.ACLclient.ContentType = optionsItem.ContentTypeclient.Token = optionsItem.Tokenclient.Region = regionclient.AccessKeyID = accessKeyIDclient.SecretKey = secretKeyclient.BucketName = bucketNameclient.UrlMain = urlMainclient.UrlFolder = urlFolderclient.FileType = fileTypesess, err := session.NewSession(&aws.Config{Region: aws.String(client.Region), //桶所在的区域Credentials: credentials.NewStaticCredentials(client.AccessKeyID, client.SecretKey, client.Token), //sts的临时凭证})if err != nil {panic(err)}client.Session = sessreturn client
}func (this *AmazonClient) Upload(buffer []byte) (url string, err error) {filePath := this.UrlFolder + tsgutils.GUID() + this.FileTypethis.FilePath=filePath_, err = s3.New(this.Session).PutObject(&s3.PutObjectInput{Bucket: aws.String(this.BucketName), //桶名Key: aws.String(filePath), //文件的目录+文件名Body: bytes.NewReader(buffer),ACL: aws.String("public-read"),//ContentType: aws.String("image/jpeg"),})if err != nil {panic(err.Error())}url = this.UrlMain + filePathreturn
}func (this *AmazonClient) Download() (fileByte []byte, err error) {out, err := s3.New(this.Session).GetObject(&s3.GetObjectInput{Bucket: aws.String("moole-verify-img-bucket-dev"), //桶名Key: aws.String(this.FilePath),})defer out.Body.Close()if err != nil {panic(err.Error())}scanner := bufio.NewScanner(out.Body)for scanner.Scan() {fileByte = scanner.Bytes()}return
}
- 单例模式
package common_useimport ("api_quant_manage_system/utils""github.com/spf13/viper""sync"
)var xlsAWSClient *utils.AmazonClientfunc InitxlsClient(v *viper.Viper)*utils.AmazonClient{if xlsAWSClient ==nil{once:=sync.Once{}once.Do(func() {if xlsAWSClient ==nil{xlsAWSClient =utils.NewAmazonClient(v.GetString("region"),v.GetString("access_key_id"),v.GetString("secret_key"),v.GetString("bucket_name"),v.GetString("url_main"),v.GetString("url_folder"),v.GetString("file_type"),utils.WithToken(v.GetString("token")),utils.WithAcl(v.GetString("acl")),utils.WithAcl(v.GetString("content_type")),)}})}return xlsAWSClient
}func GetXlsAwsClient() *utils.AmazonClient {return xlsAWSClient
}
AWS3文件上传 golang 客户端相关推荐
- 文件上传案例——客户端和服务端套接字
一.文件上传原理 文件上传下载就是反复的输入流和输出流的read和wirte方法(反复的内存和硬盘的交互): 二.实现 1.客户端实现: 2.服务端实现: 3.解决客户端和服务端两个程序在完成上传下载 ...
- Android局域网实现FTP文件上传下载客户端与服务端
文章目录 前言 一.FTP是什么? 二.使用步骤 1 服务端 1.1 服务端的代码实现 2 客户端 2.1 客户端的代码实现 附件 前言 最近在公司的项目中,使用到了 局域网通信,不同的设备直接传递消 ...
- Transmit 5.5.1 for Mac 中文共享版 – 优秀的FTP文件上传下载客户端
下载地址:风云社区 macOS文件传输应用程序的黄金标准刚刚推向未来.Transmit 5.5.1 在这里.使用简单,熟悉且功能强大的UI上传,下载和管理大量服务器上的文件. 更多服务器: Trans ...
- 分布式文件系统研究-fastDSF文件上传和下载流程
文件上传流程 客户端上传文件后存储服务器将文件ID返回给客户端,此文件ID用于以后访问该文件的索引信息.文件索引信息包括:组名,虚拟磁盘路径,数据两级目录,文件名. 组名:文件上传后所在的storag ...
- .Net Core 图片文件上传下载
当下.Net Core项目可是如雨后春笋一般发展起来,作为.Net大军中的一员,我热忱地拥抱了.Net Core并且积极使用其进行业务的开发,我们先介绍下.Net Core项目下实现文件上传下载接口. ...
- ASP.NET2.0文件上传以及图片处理总结篇 [转]
1.最简单的单文件上传(没花头) 2.多文件上传 3.客户端检查上传文件类型(以上传图片为例) 4.服务器端检查上传文件类型(以上传图片为例) 5.服务器端检查上传文件类型(可以检测真正文件名) 6. ...
- 【网络安全】文件上传漏洞 详解
文件上传漏洞 1.什么是文件上传 将客户端数据以文件形式封装,通过网络协议发送到服务器端.在服务器端解析数据,最终在服务端硬盘上作为真实的文件保存. 通常一个文件以HTTP协议进行上传时,将POST请 ...
- WEB安全基础-文件上传
文章目录 文件上传简介 什么是文件上传 什么是文件上传漏洞 文件上传产生漏洞的原因 文件上传检测方式 文件上传漏洞危害 Webshell 常用的一句话木马 制作图片马 构造php一句话木马 下载一个正 ...
- java上传与下载文件_JavaWeb之实现文件上传与下载
1.什么是上传和下载? - 数据上传是指客户端向服务器上传数据,客户端向服务器发送的所有请求都属于数据上传.文件上传是数据上传的一种特例,指的是客户端向服务器上传文件.即将保存在客户端的文件上传至服 ...
最新文章
- 详解让人闹心的C++语句 cout<<“Hello“<<endl;
- S/4HANA表现抢眼——第一季度SAP大中华区营收再现双位数增长
- string.Split(params char[])”最匹配的重载方法具有一些无效参数
- Cache--主存地址映射
- ai/ml_您本周应阅读的有趣的AI / ML文章(8月9日)
- halcon/c++接口基础 之 HALCON图像变量类
- 掌控谈话~标注对方的痛苦
- C++字符串完全指引之一(Win32 字符编码)
- 在php里面找出有用的代码,如何在多个源代码文件中 找到某段代码?
- PHP全栈开发(八):CSS Ⅴ 超链接 style
- HTML其他常用标签
- 诡异的dp(凸多边形分割):catalan数
- springboot整合富文本编辑器
- CSS 字体 font-family属性
- 第 22 届 IOCCC 获胜者作品源代码公布
- 推荐一款不错的杀毒软件,还在找卡巴激活码的网友不妨进来看看!
- Activemq配置文件详解
- 数字人民币的基础:共识与信任
- python爬虫爬取今日头条_爬取今日头条头条号文章数据
- 微软 无线键盘 linux,在Deepin系统中连接微软人体工学键盘蓝牙失效的解决方法...