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 客户端相关推荐

  1. 文件上传案例——客户端和服务端套接字

    一.文件上传原理 文件上传下载就是反复的输入流和输出流的read和wirte方法(反复的内存和硬盘的交互): 二.实现 1.客户端实现: 2.服务端实现: 3.解决客户端和服务端两个程序在完成上传下载 ...

  2. Android局域网实现FTP文件上传下载客户端与服务端

    文章目录 前言 一.FTP是什么? 二.使用步骤 1 服务端 1.1 服务端的代码实现 2 客户端 2.1 客户端的代码实现 附件 前言 最近在公司的项目中,使用到了 局域网通信,不同的设备直接传递消 ...

  3. Transmit 5.5.1 for Mac 中文共享版 – 优秀的FTP文件上传下载客户端

    下载地址:风云社区 macOS文件传输应用程序的黄金标准刚刚推向未来.Transmit 5.5.1 在这里.使用简单,熟悉且功能强大的UI上传,下载和管理大量服务器上的文件. 更多服务器: Trans ...

  4. 分布式文件系统研究-fastDSF文件上传和下载流程

    文件上传流程 客户端上传文件后存储服务器将文件ID返回给客户端,此文件ID用于以后访问该文件的索引信息.文件索引信息包括:组名,虚拟磁盘路径,数据两级目录,文件名. 组名:文件上传后所在的storag ...

  5. .Net Core 图片文件上传下载

    当下.Net Core项目可是如雨后春笋一般发展起来,作为.Net大军中的一员,我热忱地拥抱了.Net Core并且积极使用其进行业务的开发,我们先介绍下.Net Core项目下实现文件上传下载接口. ...

  6. ASP.NET2.0文件上传以及图片处理总结篇 [转]

    1.最简单的单文件上传(没花头) 2.多文件上传 3.客户端检查上传文件类型(以上传图片为例) 4.服务器端检查上传文件类型(以上传图片为例) 5.服务器端检查上传文件类型(可以检测真正文件名) 6. ...

  7. 【网络安全】文件上传漏洞 详解

    文件上传漏洞 1.什么是文件上传 将客户端数据以文件形式封装,通过网络协议发送到服务器端.在服务器端解析数据,最终在服务端硬盘上作为真实的文件保存. 通常一个文件以HTTP协议进行上传时,将POST请 ...

  8. WEB安全基础-文件上传

    文章目录 文件上传简介 什么是文件上传 什么是文件上传漏洞 文件上传产生漏洞的原因 文件上传检测方式 文件上传漏洞危害 Webshell 常用的一句话木马 制作图片马 构造php一句话木马 下载一个正 ...

  9. java上传与下载文件_JavaWeb之实现文件上传与下载

    1.什么是上传和下载? -  数据上传是指客户端向服务器上传数据,客户端向服务器发送的所有请求都属于数据上传.文件上传是数据上传的一种特例,指的是客户端向服务器上传文件.即将保存在客户端的文件上传至服 ...

最新文章

  1. 详解让人闹心的C++语句 cout<<“Hello“<<endl;
  2. S/4HANA表现抢眼——第一季度SAP大中华区营收再现双位数增长
  3. string.Split(params char[])”最匹配的重载方法具有一些无效参数
  4. Cache--主存地址映射
  5. ai/ml_您本周应阅读的有趣的AI / ML文章(8月9日)
  6. halcon/c++接口基础 之 HALCON图像变量类
  7. 掌控谈话~标注对方的痛苦
  8. C++字符串完全指引之一(Win32 字符编码)
  9. 在php里面找出有用的代码,如何在多个源代码文件中 找到某段代码?
  10. PHP全栈开发(八):CSS Ⅴ 超链接 style
  11. HTML其他常用标签
  12. 诡异的dp(凸多边形分割):catalan数
  13. springboot整合富文本编辑器
  14. CSS 字体 font-family属性
  15. 第 22 届 IOCCC 获胜者作品源代码公布
  16. 推荐一款不错的杀毒软件,还在找卡巴激活码的网友不妨进来看看!
  17. Activemq配置文件详解
  18. 数字人民币的基础:共识与信任
  19. python爬虫爬取今日头条_爬取今日头条头条号文章数据
  20. 微软 无线键盘 linux,在Deepin系统中连接微软人体工学键盘蓝牙失效的解决方法...

热门文章

  1. [15单片机] STC15F104W开发入门及模拟串口程序
  2. 什么是 gc root
  3. 手机续航测试 软件,2500mAh+软件节电 酷派大神F1续航测试
  4. linux环境下命令行bypy、BaiduPCS 从百度网盘上传、下载数据
  5. 怎么使用BaiduPCS-Go 百度网盘客户端
  6. 小白也能看懂的支付宝支付接口的对接详细步骤
  7. Spring源码讲解之 getBean 方法
  8. xlive.dll丢失怎么解决?xlive.dll没有被指定在windows运行怎么解决?
  9. jQuery 隐藏元素
  10. 哈希表与哈希冲突(手动实现哈希桶)