阿里云oss如何通过MultipartUpload向OSS上传大文件?

本文涉及的产品
对象存储 OSS,20GB 3个月
对象存储 OSS,恶意文件检测 1000次 1年
对象存储 OSS,内容安全 1000次 1年
简介: 今天向大家介绍如何通过MultipartUpload向OSS上传大文件,这里我们采用的是SDK中包含的OSSMultipartSample.java这个文件中的示例代码进行操作。除了PutObject中的基本设置之外,MultipartUpload还需要一些额外的设置。

今天向大家介绍如何通过MultipartUpload向OSS上传大文件,这里我们采用的是SDK中包含的OSSMultipartSample.java这个文件中的示例代码进行操作。除了PutObject中的基本设置之外,MultipartUpload还需要一些额外的设置。例如这里设置的PART SIZE主要是来指定后续UPLOAD时候的每个分块的大小。

image

这里还指定了上传PART的并发线程数。接下来我们来查看主函数,同样我们在主函数中先new一个Client对象,该Client对象可以通过ClientConfiguration来进行设置,这里我们采用的是默认设置。

image

在new一个Client对象后,我们去生成一个File对象,该File对象指代的是我们的大文件,我们在这里采用upLoadBigfile来统一的编写MultipartUpload的代码,我们点击进入upLoadBigfile查看其详细实现细节。

image

在该过程中,我们做的第一个步骤是计算分块的个数。我们会根据前述所定义的每个Part的大小来计算总共的分块个数,如果计算得到的PartCount小于等于一,则说明本次计算有误,我们需要重新进行任务。在计算完成之后,将通过initMultipartUpload接口来对分块上传进行初始化操作。点击进入该函数。

image

我们可以看到,该函数的参数是通过Client、bucketName以及ObjectName三个参数来实现的,主要是为了初始化一个分块上传的事件。初始化完成后,我们将得到一个uploadID,该uploadID将全局指定标识本分块上传事件。

在初始化分块上传任务的时候,我们是调用Client的InitiateMultipartUpload接口来对分块上传进行初始化。用户可以指定InitUploadRequest来指定其Request相关参数。完成后我们可以得到对应的标识该MultipartUpload的uploadID。

image

接下来我们需要创建一个线程池,我们这里采用的是上述的两并发的线程池,该线程池主要应用的是UploadPartThread。点击进入该线程查看一下。

image

我们可以看到该线程主要是通过调用Client.uploadPart功能来实现上传分块的一个接口,它的实参主要是uploadPartRequest。uploadPartRequest可以指定本次upload分块的一些属性,主要包括:BucketName、ObjectName、uploadID,它对应的Stream流和他的PartSize以及它对应的PartNumber。我们会根据指定的Bucket名称、uploadID和PartNumber区分对应的分块。

上传完成后,OSS会返回其对应的Part数据的MD5值放在eTags中,而我们可以通过list容器来获取该eTags值。

完成第二步分块上传后,我们可以通过判断我们list容器的size大小是否与我们预期的partCount的大小一致。

image

如果一致,说明我们所有的分块都已经正常上传;如果不一致,则说明我们有分块未成功上传。

确认所有分块正常上传后,我们可以通过completMultipartUpload接口来对整个分块上传任务进行完成的操作。

在完成一个MultipartUpload的请求的时候,需要用户提供有效的各分块的列表,其中包括各分块的号码(也就是PartNumer)和他对应的eTags值。OSS在接收到用户提供的Part列表以后,会逐个验证各个分块的有效性,当所有的分块有效性都验证通过后,OSS会将这些Part数据组成一个完整的Object。这里就是调用通过Client的completMultipartUpload接口来实现的。

完成上述操作后,整个MultipartUpload就算是实现完成了。而对于MultipartUpload需要注意以下两点:一、在上传分块的时候,可以通过对每个分块设置Content-MD5来验证每个分块上传的时候的有效性;二、除了最后一个分块以外,所有的分块的大小都必须大于100KB。

更多信心参见:对象存储 OSS > Java > 分片上传


原文地址:https://aliyunnew.com/a/How-to-upload-large-files-to-OSS-via-MultipartUpload.html

相关实践学习
借助OSS搭建在线教育视频课程分享网站
本教程介绍如何基于云服务器ECS和对象存储OSS,搭建一个在线教育视频课程分享网站。
相关文章
|
1天前
|
存储 开发工具 对象存储
Javaweb之SpringBootWeb案例之阿里云OSS服务入门的详细解析
Javaweb之SpringBootWeb案例之阿里云OSS服务入门的详细解析
8 0
|
7天前
|
存储 数据可视化 安全
对象存储OSS产品常见问题之有几十亿个txt文件,单个4kb,使用oss如何解决
对象存储OSS是基于互联网的数据存储服务模式,让用户可以安全、可靠地存储大量非结构化数据,如图片、音频、视频、文档等任意类型文件,并通过简单的基于HTTP/HTTPS协议的RESTful API接口进行访问和管理。本帖梳理了用户在实际使用中可能遇到的各种常见问题,涵盖了基础操作、性能优化、安全设置、费用管理、数据备份与恢复、跨区域同步、API接口调用等多个方面。
39 11
|
7天前
|
存储 监控 开发工具
对象存储OSS产品常见问题之python sdk中的append_object方法支持追加上传xls文件如何解决
对象存储OSS是基于互联网的数据存储服务模式,让用户可以安全、可靠地存储大量非结构化数据,如图片、音频、视频、文档等任意类型文件,并通过简单的基于HTTP/HTTPS协议的RESTful API接口进行访问和管理。本帖梳理了用户在实际使用中可能遇到的各种常见问题,涵盖了基础操作、性能优化、安全设置、费用管理、数据备份与恢复、跨区域同步、API接口调用等多个方面。
38 9
|
8天前
|
存储 Java API
阿里云oss简介和使用流程
本文档介绍了如何准备阿里云OSS(对象存储服务)并开始使用它。首先,需要注册阿里云账号并进行实名认证,然后购买OSS资源包。在阿里云控制台中,可以创建和管理OSS存储空间(称为“Bucket”)。接着,文章简要介绍了阿里云OSS,它是一个基于云端的对象存储服务,提供高可靠性、高性能、低成本和易于使用的特性。 在阿里云OSS控制台,用户可以进行文件的上传和下载操作。通过API,开发者可以使用各种编程语言(如Java)来创建、删除Bucket以及上传、下载和删除文件。例如,Java代码示例展示了如何创建Bucket、上传文件、删除文件以及下载文件到本地的操作。
|
15天前
|
开发工具 对象存储
阿里云OSS文件上传
阿里云OSS文件上传
57 0
|
15天前
|
存储 缓存 Java
阿里云OSS实战从入门到大神
说起阿里云OSS,那作用和功能都是非常强大的,它可以存放图片,音频,视频等资源文件,这些资源文件,你不必存放到服务器的硬盘里,这样既可以节省服务器硬盘空间,又可以降低服务器的读写压力,非常适合大并发的架构。
54 0
|
22天前
|
存储 Cloud Native Serverless
云原生最佳实践系列 7:基于 OSS Object FC 实现非结构化文件实时处理
阿里云OSS对象存储方案利用函数计算FC,在不同终端请求时实时处理OSS中的原图,减少衍生图存储,降低成本。
|
27天前
|
存储 对象存储 容器
阿里云OSS对象存储基础入门
阿里云OSS对象存储基础入门
89 0
|
30天前
|
Ubuntu JavaScript 关系型数据库
在阿里云Ubuntu 20.04服务器中搭建一个 Ghost 博客
在阿里云Ubuntu 20.04服务器上部署Ghost博客的步骤包括创建新用户、安装Nginx、MySQL和Node.js 18.x。首先,通过`adduser`命令创建非root用户,然后安装Nginx和MySQL。接着,设置Node.js环境,下载Nodesource GPG密钥并安装Node.js 18.x。之后,使用`npm`安装Ghost-CLI,创建Ghost安装目录并进行安装。配置过程中需提供博客URL、数据库连接信息等。最后,测试访问前台首页和后台管理页面。确保DNS设置正确,并根据提示完成Ghost博客的配置。
在阿里云Ubuntu 20.04服务器中搭建一个 Ghost 博客
|
1月前
|
存储 分布式计算 网络协议
阿里云服务器内存型r7、r8a、r8y实例区别参考
在阿里云目前的活动中,属于内存型实例规格的云服务器有内存型r7、内存型r8a、内存型r8y这几个实例规格,相比于活动内的经济型e、通用算力型u1实例来说,这些实例规格等性能更强,与计算型和通用型相比,它的内存更大,因此这些内存型实例规格主要适用于数据库、中间件和数据分析与挖掘,Hadoop、Spark集群等场景,本文为大家介绍内存型r7、r8a、r8y实例区别及最新活动价格,以供参考。
阿里云服务器内存型r7、r8a、r8y实例区别参考

热门文章

最新文章