Wil*_*ill 5 python rest wsgi file-upload flask
我正在尝试创建一个简单的 Flask 端点,用于通过POST或上传文件PUT。我想要filenameURL 中的 ,然后(在请求标头之后)只是在请求中流式传输原始文件数据。
我还需要能够上传略大于 2GB 的文件,并且我需要在不将整个文件存储在内存中的情况下执行此操作。起初,这似乎很简单:
@application.route("/upload/<filename>", methods=['POST', 'PUT'])
def upload(filename):
# Authorization and sanity checks skipped.
filename = secure_filename(filename)
fileFullPath = os.path.join(application.config['UPLOAD_FOLDER'], filename)
with open(fileFullPath, 'wb') as f:
copyfileobj(request.stream, f)
return jsonify({'filename': filename})
Run Code Online (Sandbox Code Playgroud)
通过multipart/formdata上传,我可以简单地调用.save()文件。
但是,我上传的任何文件似乎都有不同的校验和(好吧sha256sum,在服务器上然后在源上)。上传标准文本文件时,换行符似乎被剥离了。二进制文件似乎以其他奇怪的方式被破坏。
我Content-Type: application/octet-stream在上传时发送试图让 Flask 将所有上传视为二进制文件。request.stream(到 的代理wsgi.input)是否以非二进制形式打开?我似乎无法从 Flask 代码中弄清楚这一点。如何以原始二进制格式将请求数据流式传输到磁盘上的文件?
我对黑客持开放态度;这是一个测试项目(所以我也没有兴趣听到如何将它作为表单数据发送会更好,或者这不是上传文件的好方法等)
我正在通过以下方式测试:
curl -H 'Content-Type: application/octet-stream' -H 'Authorization: ...' -X PUT --data @/path/to/test/file.name https://test.example.com/upload/file.name
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1129 次 |
| 最近记录: |