阿里云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,搭建一个在线教育视频课程分享网站。
相关文章
|
5月前
|
机器学习/深度学习 人工智能 专有云
人工智能平台PAI使用问题之怎么将DLC的数据写入到另一个阿里云主账号的OSS中
阿里云人工智能平台PAI是一个功能强大、易于使用的AI开发平台,旨在降低AI开发门槛,加速创新,助力企业和开发者高效构建、部署和管理人工智能应用。其中包含了一系列相互协同的产品与服务,共同构成一个完整的人工智能开发与应用生态系统。以下是对PAI产品使用合集的概述,涵盖数据处理、模型开发、训练加速、模型部署及管理等多个环节。
|
1月前
|
分布式计算 Java 开发工具
阿里云MaxCompute-XGBoost on Spark 极限梯度提升算法的分布式训练与模型持久化oss的实现与代码浅析
本文介绍了XGBoost在MaxCompute+OSS架构下模型持久化遇到的问题及其解决方案。首先简要介绍了XGBoost的特点和应用场景,随后详细描述了客户在将XGBoost on Spark任务从HDFS迁移到OSS时遇到的异常情况。通过分析异常堆栈和源代码,发现使用的`nativeBooster.saveModel`方法不支持OSS路径,而使用`write.overwrite().save`方法则能成功保存模型。最后提供了完整的Scala代码示例、Maven配置和提交命令,帮助用户顺利迁移模型存储路径。
|
2月前
|
存储 Java 开发工具
【三方服务集成】最新版 | 阿里云OSS对象存储服务使用教程(包含OSS工具类优化、自定义阿里云OSS服务starter)
阿里云OSS(Object Storage Service)是一种安全、可靠且成本低廉的云存储服务,支持海量数据存储。用户可通过网络轻松存储和访问各类文件,如文本、图片、音频和视频等。使用OSS后,项目中的文件上传业务无需在服务器本地磁盘存储文件,而是直接上传至OSS,由其管理和保障数据安全。此外,介绍了OSS服务的开通流程、Bucket创建、AccessKey配置及环境变量设置,并提供了Java SDK示例代码,帮助用户快速上手。最后,展示了如何通过自定义starter简化工具类集成,实现便捷的文件上传功能。
【三方服务集成】最新版 | 阿里云OSS对象存储服务使用教程(包含OSS工具类优化、自定义阿里云OSS服务starter)
|
4月前
|
文字识别 算法 API
视觉智能开放平台产品使用合集之上传素材文件不在同一地域的OSS,怎么上传多张图片
视觉智能开放平台是指提供一系列基于视觉识别技术的API和服务的平台,这些服务通常包括图像识别、人脸识别、物体检测、文字识别、场景理解等。企业或开发者可以通过调用这些API,快速将视觉智能功能集成到自己的应用或服务中,而无需从零开始研发相关算法和技术。以下是一些常见的视觉智能开放平台产品及其应用场景的概览。
48 1
|
4月前
|
存储 机器学习/深度学习 弹性计算
阿里云EMR数据湖文件系统问题之OSS-HDFS全托管服务的问题如何解决
阿里云EMR数据湖文件系统问题之OSS-HDFS全托管服务的问题如何解决
|
4月前
|
存储 运维 Serverless
函数计算产品使用问题之OSS触发器是否可以只设置文件前缀
函数计算产品作为一种事件驱动的全托管计算服务,让用户能够专注于业务逻辑的编写,而无需关心底层服务器的管理与运维。你可以有效地利用函数计算产品来支撑各类应用场景,从简单的数据处理到复杂的业务逻辑,实现快速、高效、低成本的云上部署与运维。以下是一些关于使用函数计算产品的合集和要点,帮助你更好地理解和应用这一服务。
|
5月前
|
消息中间件 分布式计算 DataWorks
DataWorks产品使用合集之如何使用Python和阿里云SDK读取OSS中的文件
DataWorks作为一站式的数据开发与治理平台,提供了从数据采集、清洗、开发、调度、服务化、质量监控到安全管理的全套解决方案,帮助企业构建高效、规范、安全的大数据处理体系。以下是对DataWorks产品使用合集的概述,涵盖数据处理的各个环节。
|
5月前
|
存储 运维 安全
阿里云OSS的优势
【7月更文挑战第19天】阿里云OSS的优势
215 2
|
5月前
|
存储 API 开发工具
阿里云OSS
【7月更文挑战第19天】阿里云OSS
198 1
|
5月前
|
运维 Serverless 对象存储
函数计算产品使用问题之如何配合OSS实现接口收到的图片或文件直接存入OSS
函数计算产品作为一种事件驱动的全托管计算服务,让用户能够专注于业务逻辑的编写,而无需关心底层服务器的管理与运维。你可以有效地利用函数计算产品来支撑各类应用场景,从简单的数据处理到复杂的业务逻辑,实现快速、高效、低成本的云上部署与运维。以下是一些关于使用函数计算产品的合集和要点,帮助你更好地理解和应用这一服务。