回答編集履歴
3
修正
answer
CHANGED
@@ -4,10 +4,9 @@
|
|
4
4
|
```
|
5
5
|
|
6
6
|
という行がありますが、この例文のようにattributesオプションの構造をそのまま辞書化またはJSONフォーマット文字列にしてrequestsで指定しまうと、
|
7
|
-
requestsのfilesパラメータの内容と競合して、
|
8
7
|
うまくattributesの内容がBOX APIに渡らないようです。
|
9
8
|
|
10
|
-
したがって、下記のように、parent_idだけ別途、requestsモジュールのdataパラメータに指定してPOSTしてやる必要があります。
|
9
|
+
したがって、下記のように、parent_idだけ別途、requestsモジュールのdataパラメータに指定してPOSTしてやるか、json.dumpsを使用して、ネストされたパラメータを文字列化して渡す必要があります。
|
11
10
|
|
12
11
|
<全文>
|
13
12
|
```
|
2
追加
answer
CHANGED
@@ -25,6 +25,17 @@
|
|
25
25
|
}
|
26
26
|
file_bin = open(file_path, 'rb').read()
|
27
27
|
data = { "parent_id": parent_id }
|
28
|
+
'''
|
29
|
+
または、下記のようにする。
|
30
|
+
data = {
|
31
|
+
"attributes" : json.dumps({
|
32
|
+
"name" : newfile_name,
|
33
|
+
"parent" : {
|
34
|
+
"id" : parent_id
|
35
|
+
}
|
36
|
+
})
|
37
|
+
}
|
38
|
+
'''
|
28
39
|
# requestsでファイルアップロードするときの構成
|
29
40
|
files = {"file" : (newfile_name, file_bin)}
|
30
41
|
|
1
修正
answer
CHANGED
@@ -1,22 +1,3 @@
|
|
1
|
-
BOXのpython ライブラリ(https://github.com/box/box-python-sdk)を読み解いた結果
|
2
|
-
下記のようなことがわかりました。
|
3
|
-
|
4
|
-
その前にまずrequestsの基本について。
|
5
|
-
|
6
|
-
[requestsのドキュメント](https://requests.readthedocs.io/en/master/user/quickstart/#post-a-multipart-encoded-file/)に記載がありますが、
|
7
|
-
requestsモジュールにおけるMultipart-encoded fileのPOSTには、一定の決まり事があります。
|
8
|
-
|
9
|
-
すなわち、
|
10
|
-
```
|
11
|
-
files = {'任意のキー': (<ファイル名>, <ファイルの内容>, <MIMEタイプ(省略可)>)}
|
12
|
-
```
|
13
|
-
のように、キーとタプルから成る辞書を用意して、それをrequestsのpost関数のfilesパラメータに指定する必要があります。
|
14
|
-
|
15
|
-
また、requestsのPOSTのときは、基本的にPOST内容によって自動的にContent-Typeを変えて送信してくれますので、あえてContent-Typeを指定する必要はありません。
|
16
|
-
|
17
|
-
|
18
|
-
では、BOXの方に移ります。
|
19
|
-
|
20
1
|
BOXのリファレンス上の[curlでのポスト例](https://developer.box.com/reference/post-files-content/#request-example)には
|
21
2
|
```
|
22
3
|
-F attributes="{"name":"Contract.pdf", "parent":{"id":"11446498"}}"
|