我有一个AWS Lambda函数来发布一个表单,其中包含从S3到HTML服务器的文件。
grep -R --files-with-matches Apples "${dir}" | while read -r file
do
target_dir=`dirname $file`
# do something with "$target_dir"
echo $target_dir
done
我成功从AWS S3获取MS-Word文件中的数据并将其放入import requests
url = 'http://...'
# ...
self.session = requests.session()
# ...
filename = 'mammals/aboutzebras.doc'
data = {
"name":"document",
"method":"upload"
}
resource = boto3.resource('s3')
objectSummary = resource.ObjectSummary('bucket', filename)
body = objectSummary.get()["Body"]
file_content = body.read()
files = {'file': ('content', file_content, 'application/doc;charset=utf8')}
page = self.session.post(
url,
files=files,
data=data
)
print("Status code = %s" % page.status_code)
# >> Status code = 500
但是我需要对其进行base64编码吗? (我试过没有成功)。
在file_content
发送的请求对象上,我在标题requests.post
中看到设置正确,Content-Length
为Content-Type
且设置了multipart/form-data
。
我对bounday
的调用从我正在呼叫的服务器返回状态代码500。我的代码丢失了什么?
如果我使用HTML文档中的self.sessions.post
提交url
,那么我会返回<form>
status_code
,一切都很顺利。
答案 0 :(得分:0)
对我所遵循的例子的误解:
files = {'file': ('content', file_content, 'application/doc;charset=utf8')}
'file'
位置需要表单字段名称而不是'file'
,而'content'
是文件名,而不是表单字段名称。
如,
files = {'fieldname': ('filename.ext', file_content, 'application/doc;charset=utf8')}