如何使用Python将带有可恢复上传的文件> 10MB上传到Google Bucket

时间:2016-07-21 19:36:00

标签: python google-cloud-storage

我有一个应用程序可以成功地将小于10MB的视频上传到指定的Google云端存储分区,但是,它不会这样做,因为该文件大于10MB。

我想知道如何使用可恢复的上传来完成此操作。我不想要任何文档链接,我已经阅读了所有文档。它没有帮助。

我在python中这样做。我理解我做一个可恢复的上传我需要我的授权令牌,我不知道该怎么做。那么有人可以帮我一些代码吗?

以下是发布视频的代码< 10MB

class GetData(webapp2.RequestHandler):
def post(self):
    data = self.request.get('file')
    bucketname = self.request.get('bucketname')
    typeOf = self.request.get('content_type')
    sender = self.request.get('sender')
    profileVideo = self.request.get('isProfileVideo')
    file_path = ''

    now = time.time()
    objectname = now

    try:
        keytext = open(conf.PRIVATE_KEY_PATH, 'rb').read()
    except IOError as e:
        sys.exit('Error while reading private key: %s' % e)

    private_key = RSA.importKey(keytext)   
    signer = CloudStorageURLSigner(private_key, conf.SERVICE_ACCOUNT_EMAIL,
                                 GCS_API_ENDPOINT)
    subDirectory = 'videoMesseagesFrom' + sender
    if profileVideo == 'true':
        file_path = '/%s/Profile_Videos/%s' % (bucketname, objectname) 
        r = signer.Put(file_path, typeOf, data)
    else:
        file_path = '/%s/%s/%s' % (bucketname, subDirectory, objectname)
        r = signer.Put(file_path, typeOf, data)


    self.response.headers['Content-Type'] = 'application/json'  
    obj = {
               'Completion' : 'Video Successfully uploaded'
               } 
    self.response.out.write(json.dumps(obj)) 

我传入文件和存储桶名称。这会从我在项目中生成的Google生成的密钥中获取我的凭据并签署PUT URL,然后为我提供。

def Put(self, path, content_type, data):
    """Performs a PUT request.
    Args:
      path: The relative API path to access, e.g. '/bucket/object'.
      content_type: The content type to assign to the upload.
      data: The file data to upload to the new file.
    Returns:
      An instance of requests.Response containing the HTTP response.
    """
    md5_digest = base64.b64encode(md5.new(data).digest())

    base_url, query_params = self._MakeUrl('PUT', path, content_type,
                                           md5_digest)
    headers = {}
    headers['Content-Type'] = content_type
    headers['Content-Length'] = str(len(data))
    headers['Content-MD5'] = md5_digest
    return self.session.put(base_url, params=query_params, headers=headers,
                            data=data)

它已经使用Content-Type标头和所有这些进行了put请求。也许我可以对此进行检查,因此如果文件大于10MB,则以某种方式将PUT方法编辑为可恢复的上载,或者将其上传到块中。但是,我不知道该怎么做。

0 个答案:

没有答案