【问题标题】:s3 uploading file post requests3上传文件发布请求
【发布时间】:2015-05-01 18:30:53
【问题描述】:

我正在尝试通过发布请求将文件上传到亚马逊 s3。问题是我不知道如何将请求格式化为多部分表单。

这就是我现在拥有的:

content_type = "image/JPEG"
key = 'uploads/filename.jpg'
acl = "public-read"
bucket = None

params_raw = create_upload_data(content_type,key,acl,bucket)

params = { 'policy': params_raw['policy'],'acl':acl,'signature':params_raw['signature'],'key':params_raw['key'],'Content-Type':params_raw['Content-Type'],'AWSAccessKeyId':params_raw['AWSAccessKeyId'],'success_action_status':params_raw['success_action_status'],'binary': binary_data}
r = requests.post(params_raw['form_action'],data=params)

我认为我收到的回复很糟糕,因为它不是多部分表单,但回复文本如下所示:

{"request": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Error><Code>InvalidArgument</Code><Message>Conflicting query string parameters: acl, policy</Message><ArgumentName>ResourceType</ArgumentName><ArgumentValue>acl</ArgumentValue><RequestId>D558E016151E448F</RequestId><HostId>WT5aT0OOqJx3ziPgYFzjuTHJSERaCcuJG+y/acs6+l/mWVwO0MiH3lhWyBWIdhKr9BnhdIpkarw=</HostId></Error>"}

如何使用文件构建请求...它是 64 进制的 .jpg?

【问题讨论】:

    标签: python django amazon-s3


    【解决方案1】:

    改变内容类型就足够了

    content-type =  'multipart/form-data'
    

    【讨论】:

    • 这样的请求,它的工作原理! r = requests.post(params_raw['form_action'],data=params,files=dict(foo='bar'))
    【解决方案2】:

    为此感到有些痛苦,但最终还是成功了。到底很简单!

    url = "https://yourbucket.s3.amazonaws.com"
    
    #complete_path is the local server path to the file
    files = {'file':open(complete_path,'rb')}
    
    r = requests.post(url, data=params, files=files)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-15
      • 1970-01-01
      • 2017-02-12
      • 2014-02-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多