'dart http and python flask: difference between request.files and 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?
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
| Solution | Source |
|---|
