专栏首页青年夏日Python实现GCS bucket断点续传功能,分块上传文件
原创

Python实现GCS bucket断点续传功能,分块上传文件

任何程序错误,以及技术疑问或需要解答的,请扫码添加作者VX:1755337994

Python实现GCS bucket断点续传功能,分块上传文件

环境:Python 3.6

我有一个关于使用断点续传到Google Cloud Storage的上传速度的问题。我已经编写了一个Python客户端,用于将大文件上传到GCS(它具有一些特殊功能,这就是为什么gsutil对我公司不适用的原因)。在大约2个月前运行的测试中,它很好地利用了可用的连接带宽,其中25Mbps连接中大约有20Mbps。该项目被冻结了将近2个月,现在,当重新打开该项目时,同一客户端以非常慢的速度上载,速度约为25Mbps的1.4Mbps。我已经编写了简单的Python脚本来检查它是否也会遇到相同的问题,并且速度稍快一些,但仍约为2Mbps。Gsutil工具的执行效果几乎与我的Python脚本相同。我还以超过50Mbps的上传速度在不同的网络基础架构上运行了该测试,效果非常好。

参考地址:https://googleapis.dev/python/google-resumable-media/latest/resumable_media/requests.html#resumable-uploads

import google.auth
import google.auth.transport.requests as tr_requests
ro_scope = u'https://www.googleapis.com/auth/devstorage.read_only'
credentials, _ = google.auth.default(scopes=(ro_scope,))
transport = tr_requests.AuthorizedSession(credentials)
from google.resumable_media.requests import ResumableUpload
import io

bucket_name='xxxxxxx' # 桶名
csvfile_name = 'xxxxxxxxxxxxxxxxxxxx' # 文件名路径

url_template = (
    u'https://www.googleapis.com/upload/storage/v1/b/'+ bucket_name +'/o?'
    u'uploadType=resumable')

upload_url = url_template.format(bucket=bucket_name)

# 分块传输的大小
chunk_size = 1024 * 1024 * 33  # 33MB

# 开始断点续传,并分块,意思是说,一个文件比如50M,33M每块要执行两次这个语句
upload = ResumableUpload(upload_url, chunk_size)

print(response)
print(upload.resumable_url == response.headers[u'Location'])
print(upload.total_bytes == len(data))
upload_id = response.headers[u'X-GUploader-UploadID']
print(upload_id)
print(upload.resumable_url == upload_url + u'&upload_id=' + upload_id)
response0 = upload.transmit_next_chunk(transport)
print(response0)
print(upload.finished)
print(upload.bytes_uploaded == upload.chunk_size)
response1 = upload.transmit_next_chunk(transport)
print(response1)
print(upload.finished)
print(upload.bytes_uploaded == 2 * upload.chunk_size)
response2 = upload.transmit_next_chunk(transport)
print(response2)
print(upload.finished)
print(upload.bytes_uploaded == upload.total_bytes)
json_response = response2.json()
print(json_response[u'bucket'] == bucket)
print(json_response[u'name'] == blob_name)

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

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

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 文件上传那些事儿:多图上传、大文件上传、断点续传功能实现与分析

    看了不少的教程,在系统整合搭建的过程中一般写到文件上传这一节时,基本上实现一个文件上传功能就不再继续拓展,而是就此截止转而去讲解其他的内容了,因为企业级应用开发...

    程序员十三
  • Linux如何实现断点续传文件功能

    在网络状况不好的情况下,对于文件的传输,我们希望能够支持可以每次传部分数据。断点续传其实正如字面意思,就是在下载的断开点继续开始传输,不用再从头开始。所以理解断...

    砸漏
  • springboot实战之文件分片上传、断点续传、秒传

    上传是一个老生常谈的话题了,在文件相对比较小的情况下,可以直接把文件转化为字节流上传到服务器,但在文件比较大的情况下,用普通的方式进行上传,这可不是一个好的办法...

    lyb-geek
  • Python 3.8实现支持断点续传的网络文件下载功能

    下载URL指定的网络文件,支持断点续传。代码支持Python 3.5/3.6/3.7/3.8以及更新的版本。

    Python小屋屋主
  • 消息服务框架使用案例之--大文件上传(断点续传)功能

    消息服务框架使用案例之--大文件上传(断点续传)功能 一、分块上传和断点续传原理 在我们的一个产品应用中,客户需要上传大量的文件到服务器,其中不乏很大的视频文件...

    用户1177503
  • Thanos 与 VictoriaMetrics,谁才是打造大型 Prometheus 监控系统的王者?

    Thanos[1] 和 VictoriaMetrics[2] 都是用来作为 Prometheus 长期存储的成熟方案,其中 VictoriaMetrics 也开...

    米开朗基杨
  • 代码示例 | 断点续传(大文件的下载)后台功能实现

    长连接:socket、urlconnection、http、okhttp、httpclient

    码神联盟
  • PHP大文件分块上传功能实例详解

    砸漏
  • 字节面试官:请你实现一个大文件上传和断点续传

    原 作 者:yeyan1996原文链接:https://url.cn/5h66afn

    Nealyang
  • 大文件上传服务器:支持超大文件HTTP断点续传的实现办法

    最近由于笔者所在的研发集团产品需要,需要支持高性能的大文件http上传,并且要求支持http断点续传。这里在简要归纳一下,方便记忆:

    猿天地
  • 大文件上传服务器:支持超大文件HTTP断点续传的实现办法

    来源:blog.csdn.net/ababab12345/article/details/80490621

    用户1516716
  • 《Scikit-Learn、Keras与TensorFlow机器学习实用指南(第二版)》第19章 规模化训练和部署TensorFlow模型

    有了能做出惊人预测的模型之后,要做什么呢?当然是部署生产了。这只要用模型运行一批数据就成,可能需要写一个脚本让模型每夜都跑着。但是,现实通常会更复杂。系统基础组...

    SeanCheney
  • GCS游戏链公链上线发布,步入区块链游戏新时代

    GCS主链拥有每秒3300TPS的吞吐性能,理论峰值最高可达100000笔。做为底层应用公链时期的重要节点,GCS主链通过互操作接口实现了区块链技术与传统游戏的...

    区块链领域
  • Thinkphp框架+Layui实现图片/文件上传功能分析

    本文实例讲述了Thinkphp框架+Layui实现图片/文件上传功能。分享给大家供大家参考,具体如下:

    砸漏
  • Python实现腾讯云CDB备份文件自动上传到COS

    KaliArch
  • python 上传下载 OSS 文件

    实现的功能很简单,先设置好云的 AccessKeyId 和 AccessKeySecret ,然后设置你所访问的 bucket 所在的区的链接和你所需要访问的 ...

    周小董
  • 实现HTTP协议Get、Post和文件上传功能——设计和模块

            之前写过一遍《使用WinHttp接口实现HTTP协议Get、Post和文件上传功能》,其中谈到了如何使用WinHttp接口实现Http的Get、...

    方亮
  • Oracle RAC学习笔记01-集群理论

    写在前面: 最近一直在看张晓明的大话Oracle RAC,真实感受就是学到很多之前自己都没深入思考研究过的知识点,现在趁着节前头脑尚清醒,再结合实际工作中自己...

    Alfred Zhao
  • 听说你的harbor不能使用Ceph s3

    ? 1.harbor harbor主要是用来存储容器镜像的开源项目,也就是所谓的容器镜像仓库,跟OpenStack的glance功能类似,不同的是后者存放的是...

    腾讯云TStack

扫码关注云+社区

领取腾讯云代金券