回答編集履歴
1
ドキュメントはよく読む
test
CHANGED
@@ -1 +1,45 @@
|
|
1
1
|
`axios.post` の第 3 引数に `{headers: {'Content-Type': 'multipart/form-data' }}` を渡してあげてみてください。
|
2
|
+
|
3
|
+
|
4
|
+
|
5
|
+
### 追記
|
6
|
+
|
7
|
+
#### ドキュメントをよく読もう!
|
8
|
+
|
9
|
+
わたしがです!
|
10
|
+
|
11
|
+
|
12
|
+
|
13
|
+
[Uploading Files — Flask Documentation (1.1.x)](https://flask.palletsprojects.com/en/1.1.x/patterns/fileuploads/)
|
14
|
+
|
15
|
+
解決法:
|
16
|
+
|
17
|
+
```Python
|
18
|
+
|
19
|
+
...
|
20
|
+
|
21
|
+
def upload_image():
|
22
|
+
|
23
|
+
if 'file' in request.files: # <--- ここ!!!
|
24
|
+
|
25
|
+
return make_response(jsonify({'result':'file is empty.'}))
|
26
|
+
|
27
|
+
file = request.files['image']
|
28
|
+
|
29
|
+
...
|
30
|
+
|
31
|
+
```
|
32
|
+
|
33
|
+
#### なぜ `'file' in request.files['image']` ではダメなのか
|
34
|
+
|
35
|
+
標準入出力を始めファイル、ネットワークなどは最後まで読み切ってからデータを処理するのでは遅いので読み込みながら処理をします。これを**ストリーミング処理**といい、そのデータが湧いてくる部分自体をストリームと言います。ストリーミング処理はデータを全部残しておくとメモリを圧迫するので、必要な分を返したら捨ててしまいます。
|
36
|
+
|
37
|
+
|
38
|
+
|
39
|
+
それで Flask もデータを効率よく処理するために **Werkzeugの** ストリーム処理を行うクラスを使っています。そしてここにある `Request` というクラスがその処理を担っているんですが、アクセスできるデータは全部ストリームなんです。`request.files['image']` を呼んだ瞬間ストリーミング処理がバッと走って、その結果を代入しないと次 `request.files['image']` を見に行っても中身が空、というわけなんですね。
|
40
|
+
|
41
|
+
|
42
|
+
|
43
|
+
という挙動がちゃんとドキュメントに書いてありました!ごめんドキュメント!!
|
44
|
+
|
45
|
+
[Dealing with Request Data — Werkzeug Documentation (1.0.x)](https://werkzeug.palletsprojects.com/en/1.0.x/request_data/)
|