dart http 和 python Flask:request.files 和 request.form 之间的区别?
我正在使用 Dart
发送 MultipartRequest
并使用 Flask
接收它:
var request = http.MultipartRequest('POST', url)
..files.add(http.MultipartFile.fromBytes('thumbnail', thumbnail))
..files.add(await http.MultipartFile.fromPath('video', videoPath));
print('request.files: ');
print(request.files);
var streamedResponse = await request.send();
var response = await http.Response.fromStream(streamedResponse);
打印 request.files
显示我已经2 MultipartFiles
,如预期:
flutter: request.files:
flutter: [Instance of 'MultipartFile', Instance of 'MultipartFile']
然后,我在 Flask
中处理请求:
@app.route('/addPost', methods=['POST'])
def addPost():
print('request.form: ')
print(request.form)
print('request.files: ')
print(request.files)
video = request.files['video']
thumbnail = request.files['thumbnail']
但是,request.files
中仅存在“视频”,而“缩略图”是实际上在 request.form
中:
request.form:
ImmutableMultiDict([('thumbnail', '<massive string here>')])
request.files:
ImmutableMultiDict([('video', <FileStorage: 'trim.EE219D47-2D36-4A58-A242-4490C40F8A5F.MOV' ('application/octet-stream')>)])
此外,正如 this github issues< 所描述的/a>,如果我向缩略图添加文件名 MultipartFile
,“thumbnail”就会显示在 request.files
中:
var request = http.MultipartRequest('POST', url)
..files.add(http.MultipartFile.fromBytes(
'thumbnail',
thumbnail,
filename: 'placeholder_filename',
))
..files.add(await http.MultipartFile.fromPath('video', videoPath));
来自的打印Flask
:
request.form:
ImmutableMultiDict([])
request.files:
ImmutableMultiDict([('thumbnail', <FileStorage: 'placeholder_filename' ('application/octet-stream')>), ('video', <FileStorage: 'trim.E892CEB2-DD59-4F24-BB5F-6E8338E8C66B.MOV' ('application/octet-stream')>)])
那么,request.files
和 request.form
之间有什么区别,我应该如何使用它们?
I'm sending a MultipartRequest
with Dart
and receiving it with Flask
:
var request = http.MultipartRequest('POST', url)
..files.add(http.MultipartFile.fromBytes('thumbnail', thumbnail))
..files.add(await http.MultipartFile.fromPath('video', videoPath));
print('request.files: ');
print(request.files);
var streamedResponse = await request.send();
var response = await http.Response.fromStream(streamedResponse);
Printing request.files
shows that I have 2 MultipartFiles
, as expected:
flutter: request.files:
flutter: [Instance of 'MultipartFile', Instance of 'MultipartFile']
Then, I process the request in Flask
:
@app.route('/addPost', methods=['POST'])
def addPost():
print('request.form: ')
print(request.form)
print('request.files: ')
print(request.files)
video = request.files['video']
thumbnail = request.files['thumbnail']
However, only 'video' is present in request.files
, while 'thumbnail' is actually in request.form
:
request.form:
ImmutableMultiDict([('thumbnail', '<massive string here>')])
request.files:
ImmutableMultiDict([('video', <FileStorage: 'trim.EE219D47-2D36-4A58-A242-4490C40F8A5F.MOV' ('application/octet-stream')>)])
Furthermore, as described by this github issue, if I add a filename to the thumbnail MultipartFile
, 'thumbnail' then shows up in request.files
:
var request = http.MultipartRequest('POST', url)
..files.add(http.MultipartFile.fromBytes(
'thumbnail',
thumbnail,
filename: 'placeholder_filename',
))
..files.add(await http.MultipartFile.fromPath('video', videoPath));
the prints from Flask
:
request.form:
ImmutableMultiDict([])
request.files:
ImmutableMultiDict([('thumbnail', <FileStorage: 'placeholder_filename' ('application/octet-stream')>), ('video', <FileStorage: 'trim.E892CEB2-DD59-4F24-BB5F-6E8338E8C66B.MOV' ('application/octet-stream')>)])
So, what's the difference between request.files
and request.form
, and how should I be using them?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论