阿里云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,搭建一个在线教育视频课程分享网站。
相关文章
|
13天前
|
分布式计算 大数据 MaxCompute
MaxCompute产品使用合集之使用pyodps读取OSS(阿里云对象存储)中的文件的步骤是什么
MaxCompute作为一款全面的大数据处理平台,广泛应用于各类大数据分析、数据挖掘、BI及机器学习场景。掌握其核心功能、熟练操作流程、遵循最佳实践,可以帮助用户高效、安全地管理和利用海量数据。以下是一个关于MaxCompute产品使用的合集,涵盖了其核心功能、应用场景、操作流程以及最佳实践等内容。
|
2天前
|
安全 Linux 对象存储
数据备份到阿里云oss上,以防勒索病毒的破坏
数据备份到阿里云oss上,以防勒索病毒的破坏
15 0
|
4天前
|
存储 Serverless 对象存储
通过FC运行脚本下载文件到OSS
本文介绍了在阿里云中使用函数计算服务(Function Compute)从URL下载文件并存储到OSS(Object Storage Service)的步骤。首先,需开通函数计算服务并创建RAM角色,授权函数计算访问OSS权限。费用详情参考官方计费概述。操作步骤包括:登录OSS控制台,使用公共模板创建执行,配置参数并运行Python脚本,脚本负责从URL下载文件并上传至指定OSS Bucket。执行成功后,文件将出现在目标OSS Bucket中。
21 0
|
13天前
|
分布式计算 Java 大数据
MaxCompute产品使用合集之大数据计算MaxCompute外部表映射了oss中的csv文件,看到"\N"被解析为"N",是什么原因
MaxCompute作为一款全面的大数据处理平台,广泛应用于各类大数据分析、数据挖掘、BI及机器学习场景。掌握其核心功能、熟练操作流程、遵循最佳实践,可以帮助用户高效、安全地管理和利用海量数据。以下是一个关于MaxCompute产品使用的合集,涵盖了其核心功能、应用场景、操作流程以及最佳实践等内容。
|
15天前
|
运维 Java Serverless
Serverless 应用引擎产品使用之数据文件(例如sdxl)超过了OSS(对象存储服务)的单个上传大小限制(5GB)如何解决
阿里云Serverless 应用引擎(SAE)提供了完整的微服务应用生命周期管理能力,包括应用部署、服务治理、开发运维、资源管理等功能,并通过扩展功能支持多环境管理、API Gateway、事件驱动等高级应用场景,帮助企业快速构建、部署、运维和扩展微服务架构,实现Serverless化的应用部署与运维模式。以下是对SAE产品使用合集的概述,包括应用管理、服务治理、开发运维、资源管理等方面。
21 1
|
18天前
|
网络协议 对象存储
阿里云oss配置自有域名
阿里云oss配置自有域名
24 1
|
20天前
|
存储 JSON 前端开发
Javaweb之SpringBootWeb案例之阿里云OSS服务集成的详细解析
Javaweb之SpringBootWeb案例之阿里云OSS服务集成的详细解析
19 0
|
2天前
|
弹性计算 运维 监控
解密阿里云弹性计算:探索云服务器ECS的核心功能
阿里云ECS是核心计算服务,提供弹性云服务器资源,支持实例按需配置、集群管理和监控,集成安全防护,确保服务稳定、安全,助力高效业务运营。
14 0
|
11天前
|
存储 弹性计算 固态存储
阿里云服务器CPU内存配置详细指南,如何选择合适云服务器配置?
阿里云服务器配置选择涉及CPU、内存、公网带宽和磁盘。个人开发者或中小企业推荐使用轻量应用服务器或ECS经济型e实例,如2核2G3M配置,适合低流量网站。企业用户则应选择企业级独享型ECS,如通用算力型u1、计算型c7或通用型g7,至少2核4G配置,公网带宽建议5M,系统盘可选SSD或ESSD云盘。选择时考虑实际应用需求和性能稳定性。
118 6
|
13天前
|
域名解析 弹性计算 Linux
阿里云购买云服务器、注册域名、备案及绑定图文教程参考
本文为大家介绍了2024年购买阿里云服务器和注册域名,绑定以及备案的教程,适合需要在阿里云购买云服务器、注册域名并备案的用户参考,新手用户可通过此文您了解在从购买云服务器到完成备案的流程。
阿里云购买云服务器、注册域名、备案及绑定图文教程参考