5、AWS SDK for Go-使用s3manager上传下载文件

这篇具有很好参考价值的文章主要介绍了5、AWS SDK for Go-使用s3manager上传下载文件。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

传输管理器

文档地址:传送门
上传和下载管理器可以分解大型对象,以便可以将它们分成多个部分并行传输。这使得恢复中断的传输变得容易。

下载管理器

S3 下载管理器确定文件是否可以拆分为更小的部分并并行下载。您可以自定义并行下载的数量和下载部分的大小。

上传管理器

S3 上传管理器确定文件是否可以拆分为更小的部分并并行上传。您可以自定义并行上传的数量和上传部分的大小。

示例代码

package main

import (
	"fmt"
	"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"
	"github.com/aws/aws-sdk-go/service/s3/s3manager"
	"os"
)

var (
	accessKey = "xxx"       //""
	secretKey = "xxx" //""
	region    = "oss-cn-beijing"
	endpoint  = "oss-cn-beijing.aliyuncs.com"
)

func main() {
	//只要不修改session,session就可以安全的并发使用。
	sess, err := session.NewSession(&aws.Config{
		Credentials: credentials.NewStaticCredentials(accessKey, secretKey, ""),
		Endpoint:    aws.String(endpoint),
		Region:      aws.String(region),
		//minio:true,oss:false
		S3ForcePathStyle: aws.Bool(false),
		//SDK 支持使用客户端 TLS 证书配置的环境和会话选项,这些证书作为客户端 TLS 握手的一部分发送以进行客户端身份验证。
		//如果使用,则需要 Cert 和 Key 值。如果缺少一个,或者无法加载文件的内容,则会返回一个错误。
		//ClientTLSCert:              nil,
		//ClientTLSKey:               nil,
	})
	if err != nil {
		panic(err)
	}

	svc := s3.New(sess)
	//本地需要存在一个2.jpg文件
	UploadWithClient(svc, "bkt-bj1", "2.jpg")
	DownloadWithClient(svc, "bkt-bj1", "2.jpg")

}

//https://docs.aws.amazon.com/zh_cn/sdk-for-go/v1/developer-guide/sdk-utilities.html
//传输管理器 上传和下载管理器可以分解大型对象,以便可以将它们分成多个部分并行传输。这使得恢复中断的传输变得容易。
//S3 下载管理器确定文件是否可以拆分为更小的部分并并行下载。您可以自定义并行下载的数量和下载部分的大小。
func DownloadWithClient(svc *s3.S3, bucket, key string) {
	download := s3manager.NewDownloaderWithClient(svc, func(d *s3manager.Downloader) {
		d.PartSize = 64 * 1024 * 1024 // 64MB per part
		//d.BufferProvider = s3manager.NewPooledBufferedWriterReadFromProvider(25 * 1024 * 1024)
	})

	f, err := os.Create("d_" + key)
	if err != nil {
		panic(err)
	}
	defer f.Close()
	n, err := download.Download(f, &s3.GetObjectInput{
		Bucket: aws.String(bucket),
		Key:    aws.String(key),
	})
	if err != nil {
		panic(err)
	}
	fmt.Printf("Download.n:%d\n", n)
}

//S3 上传管理器确定文件是否可以拆分为更小的部分并并行上传。您可以自定义并行上传的数量和上传部分的大小。
func UploadWithClient(svc *s3.S3, bucket, key string) {
	uploader := s3manager.NewUploaderWithClient(svc, func(u *s3manager.Uploader) {
		定义将在内存中缓冲25个MiB的策略
		//u.BufferProvider = s3manager.NewBufferedReadSeekerWriteToPool(25 * 1024 * 1024)
		//指定要上传的每个部分的缓冲区大小(以字节为单位)。每个部分的最小大小为 5 MB。 DefaultUploadPartSize
		u.PartSize = 64 * 1024 * 1024 // 每个部分 64MB
		//	指定要并行上传的part数量。 默认为5
		u.Concurrency = s3manager.DefaultUploadConcurrency
	})
	fOpen, err := os.Open(key)
	if err != nil {
		panic(err)
	}
	uploadOutput, err := uploader.Upload(&s3manager.UploadInput{
		Body:   fOpen,
		Bucket: aws.String(bucket),
		Key:    aws.String(key),
	})
	if err != nil {
		if multierr, ok := err.(s3manager.MultiUploadFailure); ok {
			// Process error and its associated uploadID
			fmt.Println("Error:", multierr.Code(), multierr.Message(), multierr.UploadID())
		} else {
			// Process error generically
			fmt.Println("Error:", err.Error())
		}

		return
	}
	fmt.Printf("UploadID:%s\n", uploadOutput.UploadID)
	fmt.Printf("ETag:%s\n", *uploadOutput.ETag)
	fmt.Printf("Location:%s\n", uploadOutput.Location)
}


输出结果

UploadID:
ETag:"43325E9E80CDF868045A4ADD7893B935"
Location:https://bkt-bj1.oss-cn-beijing.aliyuncs.com/2.jpg
Download.n:147526

下载的文件:d_2.jpg如图
s3manager.newuploader,aws-sdk-go,aws,golang,云计算文章来源地址https://www.toymoban.com/news/detail-607443.html

到了这里,关于5、AWS SDK for Go-使用s3manager上传下载文件的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Windows下Qt使用AWS SDK for C++连接MinIO服务器

    MinIO——分布式对象存储服务器。 它是一个是一个高性能的对象存储服务器,用于构建云存储解决方案,出于工作需求用到了这个MinIO来管理文件。 但,我用的是Qt,c++语言,并且使用环境是windows,可MinIO的C++ SDK只能Linux使用,不支持Windows,如果非要自己编译Windows版本的话估

    2024年02月02日
    浏览(77)
  • AWS SDK 3.x for .NET Framework 4.0 可行性测试

    为了应对日益增长的网络安全挑战, 越来越多的互联网厂商已经陆续开始或者已经彻底停止了对 SSL 3 / TLS 1.0 / TLS1.1 等上古加密算法的支持. 而对于一些同样拥有悠久历史的和 AWS 服务相关联的应用程序, 是否可以通过仅更新 SDK 版本的方式来适应新的环境. 本文将以 Windows Serv

    2024年02月11日
    浏览(45)
  • AWS-自定义ami的S3存取使用

    需要提前配置好aws-cli哈 对应的区域 要统一 示例:即AWS-CLI 和 EC2、AMI、S3以上资源均要使用同已区域,以下拿新加坡举例 1.新建自定义AMI 2.查看ami状态 确认是可用状态,才能开始操作 3.aws-cli 开始存入s3 只能使用桶的根目录 开始上传s3 正常回显 查看进度 正常回显 去桶上查看

    2024年02月13日
    浏览(39)
  • [ 云计算 | AWS 实践 ] 使用 Java 列出存储桶中的所有 AWS S3 对象

    本文收录于【#云计算入门与实践 - AWS】专栏中,收录 AWS 入门与实践相关博文。 本文同步于个人公众号:【 云计算洞察 】 更多关于云计算技术内容敬请关注:CSDN【#云计算入门与实践 - AWS】专栏。 本系列已更新博文: [ 云计算 | AWS 实践 ] Java 应用中使用 Amazon S3 进行存储桶

    2024年02月06日
    浏览(49)
  • AWS s3 使用教程,前后端Java+html开发教程

    目录 一、 AWS S3配置说明 1. S3 Bucket配置 1.1 ACL配置 1.2 存储桶策略配置 1.3 跨源资源共享配置 2. IAM配置 2.1 创建S3UploadPolicy策略 2.2 创建S3的Role 3. EC2配置 3.1 EC2添加role 二、S3 HTML+JAVA代码实现 三、AWS cloudfront 及Signed url 四、相关文档 S3 Bucket包括ACL配置、存储桶策略配置及跨源资

    2024年02月03日
    浏览(35)
  • 使用亚马逊(AWS)云服务在S3上实现图片缩放功能(CloudFront/S3[AccessPoint/LambdaAccessPoint])

    亚马逊云服务中的S3对象存储功能和国内阿里云的oss对象存储使用基本一致。但是涉及到存储内容处理时,两家有些差别。 比如:对于云存储中的图片资源,阿里云比较人性化对于基本的缩放裁剪功能已经帮我们封装好了,只需要在url地址后面拼接参数即可,但是亚马逊S3存

    2024年02月16日
    浏览(40)
  • [ 云计算 | AWS 实践 ] 使用 Java 更新现有 Amazon S3 对象

    本文收录于【#云计算入门与实践 - AWS】专栏中,收录 AWS 入门与实践相关博文。 本文同步于个人公众号:【 云计算洞察 】 更多关于云计算技术内容敬请关注:CSDN【#云计算入门与实践 - AWS】专栏。 本系列已更新博文: [ 云计算 | AWS 实践 ] Java 应用中使用 Amazon S3 进行存储桶

    2024年02月05日
    浏览(48)
  • Amazon S3 的 java sdk简单使用

    在开发过程中基本都需要使用到对象存储技术。 对于一些国内的项目来说,可以使用阿里云,七牛云,京东云等开发平台进行开发对接存储对象。 而对于海外的项目,可能现有的国内技术无法使用,这时候就遇到了amazon这个平台了。在此只整理了其对接以及对象存储和验签

    2024年02月02日
    浏览(45)
  • 使用AWS MVP方案[Data Transfer Hub]从Global S3同步文件到中国区S3

    本文主要描述在AWS Global区部署Data Transfer Hub方案,并创建从global S3同步文件到中国区S3的任务   1.1 AWS Global账号 需要一个AWS Global的账号,并且有相应的权限,本例是Full Administrator权限 1.2 在AWS Global账号下准备一个S3存储桶 登陆AWS Global账号,选择 服务 - 存储 - S3   点击创建

    2024年02月08日
    浏览(47)
  • 使用rclone工具实现华为云OBS至AWS S3数据迁移同步

            项目需要将华为云的OBS对象存储服务的存储桶bucket的内容迁移复制到AWS云的S3存储桶中,AWS中暂无实现改需求的云服务,所以采用开源的第三方软件rclone来实现。         rclone可以使用在linux操作系统中,是一种命令行形式的工具。 华为云OBS: 1. 已从统一身份认

    2024年02月02日
    浏览(88)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包