开发者学堂课程【管理功能玩转对象存储 OSS 使用入门:如何迁移 OSS 的文件_2】学习笔记,与课程紧密联系,让用户快速学习知识
课程地址:https://developer.aliyun.com/learning/course/378/detail/4745
如何迁移 OSS 的文件_2
内容介绍
一、通过 API/SDK上传 文件
二、MultipartUpload 注意事项
一、通过 API/SDK 上传文件
1、通过 MultipartUpload 对象 oss上传大文件,回到 eclipse 工作环境,这里采用的是 SDK 中包含的 oss 的 Multipartsample.Java 这个文件中的示例代码进行操作,除了 putobject 中的基本设置外,MultipartUpload 还需要一些额外的设置,例如设置的 part_size 主要是来指定后续 upload 时候的每个分块的大小,这里只还指定上传 part 的并发线程数。
2、查看主函数,在主函数中先用一个 client 的对象,该 client 对象可以通过clientconfiguration 进行设置,这里采用的是默认设置。当有一个 client 对象后,去生成一个 file 对象。该 file 对象指代的是的大文件,在这里采用了 upload big file 来统一的编写 MultipartUpload 的代码,点击进入被 upload big file 查看其详细实现细节。
3、首先在该过程中主要做的第一个步骤就是去计算每个分块的个数,会根据前述所定义的每个 part 的大小来计算总共的分块个数,如果计算得到的 part count 小于等于1,则说明本次计算有误,需要重新的进行任务。在计算完成之后,将通过initmultipartupload 接口来对分块上传进行初始化操作,点击进入该函数,可以看到该函数的参数是通过 client bucketname objectname 三个参数来实现的,主要是为了初始化一个分块上传的事件,初始化完成后将得到一个 upload ID 该 upload ID 将全局指定标识本次分块上传的事件。在初始化分块上传的任务的时候,是调用 client 的 initiaremultipartupload 接口来对该方法进行分块上传进行初始化,用户可以指定 initiaremultipartupload 指定其 request 相关参数,在完成后,就将可以得到对应的标识,该 MultipartUpload 的 upload ID。
4、接下来需要做的第二步就是需要创建一个线程时,这里采用的是上述的两并发的线程时得到该线程时主要应用的是 uploadpartthread 该线程,点击进入该线程查看,可以查看该线程主要是来通过调用 client 的 uploadpart 功能实现上传分块的一个接口,它的实参主要是 uploadpartRequest,uploadpartRequest 可以指定本次 upload 分块它所属的一些特性,一些属性包括主要包括 bucketname,objectname ,upload ID,它对应的 streamli,它的 part 大小以及它对应的 partnumber,会根据指定的bucket的名称 upload ID,并根据 partnumber 来区分对应的分块。在上传完成后,oss 会返回其对应的 Python 数据的 MD 值放在attack 中,可以通过类似的容器来获取该 attack 值。再完成第二步分块上传后,可以通过去判断类似的容器的一个 size 大小是否与预期的 part count 的大小是否一致,如果一致说明的所有的分块都已经正常上传,而如果不一致则说明有分块未成功上传。
5、在确认完所有分块正常上传后,可以通过 complatemultipartupload 接口来对整个分块上传任务进行完成的操作。在完成一个 multipartupload 的请求的时候,需要用户提供有效的各分块的列表,其中包括各分块的号码,也就是 part number和它对应的 lient,oss 在接收到用户提供的 part 列表以后,会逐个验证各个分块的有效性,当所有的分块的有效性都验证通过后,oss 将这些数据的 part 组成一个完整的 object。而这里所调用的接口就是通过 client 的 complatemultipartupload接口来实现的。在完成上述的操作后,整个 multipartupload 就算是实现完成。
二、MultipartUpload 注意事项
1、上传分块可以通过 Content-MD5 验证分块的有效性。
2、除最后一块以外所有块的大小都大于100KB。