前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >易语言COS分片上传写法分享分析

易语言COS分片上传写法分享分析

原创
作者头像
用户2551353
修改2021-09-29 09:52:08
1.9K0
修改2021-09-29 09:52:08
举报
文章被收录于专栏:易语言对象存储

Hello大家好啊,今天给大家带来一片处女作文章!

首先是:初始化分片上传

  • .版本 2 .支持库 spec 欲上传到的路径 = “” 文件名称 = “” 存储桶访问域名 = 存储桶访问域名1 上传分区 = 上传区分1 欲上传对象路径 = 欲上传对象路径1 Header = “Host:” + 文本_取右边 (存储桶访问域名, “//”) .判断开始 (欲上传到的路径 = “”) Request = “/” .默认 Request = 欲上传到的路径 .判断结束 .判断开始 (文件名称 = “”) Request = Request + 文本_取右边 (欲上传对象路径, “\”) .默认 Request = Request + 文件名称 + “.” + 文本_取右边 (欲上传对象路径, “.”) .判断结束 ' 调试输出 (“Request:” + Request) Header = Header + #换行符 + “Date:” + 时间_转为GMT格式1 (取现行时间 ()) Header = Header + #换行符 + “Content-Type:” + 取MIME (文本_取右边 (欲上传对象路径, “.”)) ' Header = Header + #换行符 + “Cache-Control: max-age=86400” ' Header = Header + #换行符 + “Content-Disposition: ” + 设置文件名称 ' Header = Header + #换行符 + “x-cos-meta-example-field: example-value” Header = Header + #换行符 + “x-cos-acl:private” Header = Header + #换行符 + “Content-Length:0 ” ' Header = Header + #换行符 + “Authorization: ” + 签名 (ID, KEY, 1, , 2, Request, , ) Header = Header + #换行符 + “Authorization:” + 签名 (“ID”, “KEY”, 1, 1, 2, Request, , ) ' Header = Header + #换行符 + “Connection: close” ' 调试输出 (“555 :” + Header) str = 编码_Utf8到Ansi (网页_访问_对象 (存储桶访问域名 + Request + “?uploads”, 1, “”, , , Header, , code, , , )) 调试输出 (str) UploadId = 文本_取出中间文本 (str, “<UploadId>”, “</UploadId>”) 调试输出 (上传文件Key, UploadId) TotalList [上传分区] = UploadId

  • 、第二步就是UploadPart啦
  • 这一步最重要的就是,将文件以字节集方式分块读入。

.版本 2

.支持库 spec

读入文件_子程序 (欲上传对象路径, b)

' a = 读入文件 (欲上传对象路径) ' ------a是文件数据 分割次数是PartNum b【】数组存放part数据

分割次数 = 取数组成员数 (b) - 1

总块数 [上传区分] = 取数组成员数 (b)

' 进度条_模拟 (画板1, 分割次数 + 1, 0, #青蓝, “文件分片完成....”, , 真)

' 取余 = 取字节集长度 (a) % 分割次数

.' 如果真 (取余 ≠ 0) ' 不能平分就单独取出余数,并删除尾部多余

' b [分割次数 + 1] = 取字节集右边 (a, 取余) ' 把尾部多余的单独储存

' a = 取字节集左边 (a, 取字节集长度 (a) - 取余) ' 让A继承A,但是长度已经成为整除分割次数的倍数

.如果真结束

.' 计次循环首 (分割次数, i)

' ' b [i] = 取字节集右边 (取字节集左边 (a, 取字节集长度 (a) ÷ 分割次数 × i), 取字节集长度 (a) ÷ 分割次数)

' b [i] = 取字节集左边 (a, 取字节集长度 (a) ÷ 分割次数 × i)

' b [i] = 取字节集右边 (b [i], 取字节集长度 (b [i]) ÷ i)

.' 计次循环尾 ()

' 以上是分割,以下是写出分割的文件

.计次循环首 (分割次数, i)

' total = total + b [i]

IP = 存储桶访问域名 + “/” + 文本_取右边 (欲上传对象路径, “\”) + “?partNumber=” + 到文本 (i) + “&uploadId=” + UploadId1

ObjectPart = b [i]

Header = “Host:” + 文本_取右边 (存储桶访问域名, “//”)

' 调试输出 (“Request:” + Request)

Header = Header + #换行符 + “Date:” + 时间_转为GMT格式1 (取现行时间 ())

Header = Header + #换行符 + “Content-Type:” + 取MIME (文本_取右边 (欲上传对象路径, “.”))

' Header = Header + #换行符 + “Cache-Control: max-age=86400”

' Header = Header + #换行符 + “Content-Disposition: ” + 设置文件名称

' Header = Header + #换行符 + “x-cos-meta-example-field: example-value”

' Header = Header + #换行符 + “x-cos-acl:public-read ”

Header = Header + #换行符 + “Content-Length:” + 到文本 (5242880)

' Header = Header + #换行符 + “Content-MD5:” + 芭田网络_baes64_md5 (ObjectPart) ' 编码_BASE64编码 (到字节集 (校验_取md5 (ObjectPart, , 真)))编码_BASE64编码 (到字节集 (校验_取md5 (读入文件 (文本_取右边 (欲上传对象路径, “\”)), , ))) ' 编码_BASE64编码 (到字节集 (校验_取md5 (到字节集 (字节集_字节集到十六进制 (ObjectPart))))) 编码_BASE64编码 (到字节集 (校验_取md5 (ObjectPart, , 真)))

' Header = Header + #换行符 + “Authorization: ” + 签名 (ID, KEY, 1, , 2, Request, , )

Header = Header + #换行符 + “Authorization:” + 签名 (ID, KEY, 1, , 3, “/” + 文本_取右边 (欲上传对象路径, “\”)) ' 总签名 () ' 签名 (ID, KEY, 1, , 3, “\” + 文本_取右边 (欲上传对象路径, “\”)) ' 签名 (“ID”, “KEY”, 1, 1, 2, Request, , )

Header = Header + #换行符 + “Connection: close”

' str = 编码_Utf8到Ansi (网页_访问 (IP, 3, , , , Header, , , 读入文件 (文本_取右边 (欲上传对象路径, “\”)), , , , ))

str = 编码_Utf8到Ansi (网页_访问_对象 (IP, 3, , , , Header, res, code, , ObjectPart, ))

' str = 编码_Utf8到Ansi (网页_访问 (IP, 3, , , , Header, , , 读入文件 (文本_取右边 (欲上传对象路径, “\”)), , , , ))

' str = 编码_Utf8到Ansi (网页_访问_对象 (IP, 3, , , , Header, res, code, , ObjectPart, ))

Etag = 文本_取出中间文本 (res, #E前, #E后)

.如果真 (Etag = “”)

' 如果真 (二次效验 = 1)

.计次循环首 (舍弃, q)

.如果真 (文本_取右边 (欲上传对象路径, “\”) = 舍弃文件 [q])

二次效验 = 2

跳出循环 ()

.如果真结束

二次效验 = 1

.计次循环尾 ()

.如果真 (二次效验 = 2)

跳出循环 ()

.如果真结束

.判断循环首 (Etag = “”)

str = 编码_Utf8到Ansi (网页_访问_对象 (IP, 3, , , , Header, res, code, , ObjectPart, ))

Etag = 文本_取出中间文本 (res, #E前, #E后) ' ================== ' ======================安全

.判断循环尾 ()

.' 如果真 (Etag ≠ “”)

' 跳出循环 ()

.如果真结束

'

' 信息框 (文本_取右边 (欲上传对象路径, “\”) + “的分片” + 到文本 (i), 0, , )

.如果真结束

Etag = 文本_替换 (#中间XML, , , , “标签号”, Etag)

Etag = 文本_替换 (Etag, , , , “分片编号”, 到文本 (i))

提交xml = 提交xml + #换行符 + Etag

' 进度条_模拟 (画板1, 分割次数 + 1, i, #青蓝, “文件分片已上传:....”, , 真)

调试输出 (“str” + str + res)

块数已上传 [上传区分] = i

.计次循环尾 ()

.版本 2

IP = 存储桶访问域名 + “/” + 文本_取右边 (欲上传对象路径, “\”) + “?partNumber=” + 到文本 (i) + “&uploadId=” + UploadId1

ObjectPart = b [分割次数 + 1]

Header = “Host:” + 文本_取右边 (存储桶访问域名, “//”)

' 调试输出 (“Request:” + Request)

Header = Header + #换行符 + “Date:” + 时间_转为GMT格式1 (取现行时间 ())

Header = Header + #换行符 + “Content-Type:” + 取MIME (文本_取右边 (欲上传对象路径, “.”))

' Header = Header + #换行符 + “Cache-Control: max-age=86400”

' Header = Header + #换行符 + “Content-Disposition: ” + 设置文件名称

' Header = Header + #换行符 + “x-cos-meta-example-field: example-value”

' Header = Header + #换行符 + “x-cos-acl:public-read ”

Header = Header + #换行符 + “Content-Length:” + 到文本 (取字节集长度 (ObjectPart))

' Header = Header + #换行符 + “Content-MD5:” + 芭田网络_baes64_md5 (ObjectPart) ' 编码_BASE64编码 (到字节集 (校验_取md5 (ObjectPart, , 真)))编码_BASE64编码 (到字节集 (校验_取md5 (读入文件 (文本_取右边 (欲上传对象路径, “\”)), , ))) ' 编码_BASE64编码 (到字节集 (校验_取md5 (到字节集 (字节集_字节集到十六进制 (ObjectPart))))) 编码_BASE64编码 (到字节集 (校验_取md5 (ObjectPart, , 真)))

' Header = Header + #换行符 + “Authorization: ” + 签名 (ID, KEY, 1, , 2, Request, , )

Header = Header + #换行符 + “Authorization:” + 签名 (ID, KEY, 1, , 3, “/” + 文本_取右边 (欲上传对象路径, “\”)) ' 总签名 () ' 签名 (ID, KEY, 1, , 3, “\” + 文本_取右边 (欲上传对象路径, “\”)) ' 签名 (“ID”, “KEY”, 1, 1, 2, Request, , )

Header = Header + #换行符 + “Connection: close”

' str = 编码_Utf8到Ansi (网页_访问 (IP, 3, , , , Header, , , 读入文件 (文本_取右边 (欲上传对象路径, “\”)), , , , ))

str = 编码_Utf8到Ansi (网页_访问_对象 (IP, 3, , , , Header, res, code, , ObjectPart, ))

' 上传标识 = 0

' 上传数组数 = 0

Etag = 文本_取出中间文本 (res, #E前, #E后)

Etag = 文本_替换 (#尾XML, , , , “标签号”, Etag)

Etag = 文本_替换 (Etag, , , , “分片编号”, 到文本 (i))

最后一步,就是CompleteUpload

.版本 2

IP = 存储桶访问域名 + “/” + 文本_取右边 (欲上传对象路径, “\”) + “?uploadId=” + UploadID

Header = “Host:” + 文本_取右边 (存储桶访问域名, “//”)

' 调试输出 (“Request:” + Request)

Header = Header + #换行符 + “Date:” + 时间_转为GMT格式1 (取现行时间 ())

Header = Header + #换行符 + “Content-Type:application/xml”

' Header = Header + #换行符 + “Cache-Control: max-age=86400”

' Header = Header + #换行符 + “Content-Disposition: ” + 设置文件名称

' Header = Header + #换行符 + “x-cos-meta-example-field: example-value”

' Header = Header + #换行符 + “x-cos-acl:public-read ”

Header = Header + #换行符 + “Content-Length:” + 到文本 (取文本长度 (XML [上传区分_局变]))

' Header = Header + #换行符 + “Content-MD5:” + 芭田网络_baes64_md5 (ObjectPart) ' 编码_BASE64编码 (到字节集 (校验_取md5 (ObjectPart, , 真)))编码_BASE64编码 (到字节集 (校验_取md5 (读入文件 (文本_取右边 (欲上传对象路径, “\”)), , ))) ' 编码_BASE64编码 (到字节集 (校验_取md5 (到字节集 (字节集_字节集到十六进制 (ObjectPart))))) 编码_BASE64编码 (到字节集 (校验_取md5 (ObjectPart, , 真)))

' Header = Header + #换行符 + “Authorization: ” + 签名 (ID, KEY, 1, , 2, Request, , )

Header = Header + #换行符 + “Authorization:” + 签名 (“ID”, “KEY, 1, 1, 2, “/” + 文本_取右边 (欲上传对象路径, “\”), , )

' 签名 (ID, KEY, 1, , 3, “\” + 文本_取右边 (欲上传对象路径, “\”)) ' 签名 (“ID”, “KEY”, 1, 1, 2, Request, , )

Header = Header + #换行符 + “Connection: close”

' str = 编码_Utf8到Ansi (网页_访问 (IP, 3, , , , Header, , , 读入文件 (文本_取右边 (欲上传对象路径, “\”)), , , , ))

str = 编码_Utf8到Ansi (网页_访问_对象 (IP, 1, XML [上传区分_局变], , , Header, , code, , , ))

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
对象存储
对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档