Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/276.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python s3上传文件后请求_Python_Django_Amazon S3 - Fatal编程技术网

Python s3上传文件后请求

Python s3上传文件后请求,python,django,amazon-s3,Python,Django,Amazon S3,我正试图通过post请求将文件上传到AmazonS3。问题是我不知道如何将请求格式化为多部分表单 这就是我现在拥有的: 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['pol

我正试图通过post请求将文件上传到AmazonS3。问题是我不知道如何将请求格式化为多部分表单

这就是我现在拥有的:

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>"}

如何使用文件构造请求。。。在base 64中是一个.jpg?

更改内容类型就足够了

content-type =  'multipart/form-data'

在这件事上有点痛苦,但最终还是成功了。最后很简单

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)

请求是这样的吗?它成功了!r=requests.post(params_raw['form_action'],data=params,files=dict(foo='bar'))