回答編集履歴

3

修正

2020/10/31 14:45

投稿

sfdust
sfdust

スコア1137

test CHANGED
@@ -10,13 +10,11 @@
10
10
 
11
11
  という行がありますが、この例文のようにattributesオプションの構造をそのまま辞書化またはJSONフォーマット文字列にしてrequestsで指定しまうと、
12
12
 
13
- requestsのfilesパラメータの内容と競合して、
14
-
15
13
  うまくattributesの内容がBOX APIに渡らないようです。
16
14
 
17
15
 
18
16
 
19
- したがって、下記のように、parent_idだけ別途、requestsモジュールのdataパラメータに指定してPOSTしてやる必要があります。
17
+ したがって、下記のように、parent_idだけ別途、requestsモジュールのdataパラメータに指定してPOSTしてやるか、json.dumpsを使用して、ネストされたパラメータを文字列化して渡す必要があります。
20
18
 
21
19
 
22
20
 

2

追加

2020/10/31 14:45

投稿

sfdust
sfdust

スコア1137

test CHANGED
@@ -51,6 +51,28 @@
51
51
  file_bin = open(file_path, 'rb').read()
52
52
 
53
53
  data = { "parent_id": parent_id }
54
+
55
+ '''
56
+
57
+ または、下記のようにする。
58
+
59
+ data = {
60
+
61
+ "attributes" : json.dumps({
62
+
63
+ "name" : newfile_name,
64
+
65
+ "parent" : {
66
+
67
+ "id" : parent_id
68
+
69
+ }
70
+
71
+ })
72
+
73
+ }
74
+
75
+ '''
54
76
 
55
77
  # requestsでファイルアップロードするときの構成
56
78
 

1

修正

2020/10/31 14:19

投稿

sfdust
sfdust

スコア1137

test CHANGED
@@ -1,41 +1,3 @@
1
- BOXのpython ライブラリ(https://github.com/box/box-python-sdk)を読み解いた結果
2
-
3
- 下記のようなことがわかりました。
4
-
5
-
6
-
7
- その前にまずrequestsの基本について。
8
-
9
-
10
-
11
- [requestsのドキュメント](https://requests.readthedocs.io/en/master/user/quickstart/#post-a-multipart-encoded-file/)に記載がありますが、
12
-
13
- requestsモジュールにおけるMultipart-encoded fileのPOSTには、一定の決まり事があります。
14
-
15
-
16
-
17
- すなわち、
18
-
19
- ```
20
-
21
- files = {'任意のキー': (<ファイル名>, <ファイルの内容>, <MIMEタイプ(省略可)>)}
22
-
23
- ```
24
-
25
- のように、キーとタプルから成る辞書を用意して、それをrequestsのpost関数のfilesパラメータに指定する必要があります。
26
-
27
-
28
-
29
- また、requestsのPOSTのときは、基本的にPOST内容によって自動的にContent-Typeを変えて送信してくれますので、あえてContent-Typeを指定する必要はありません。
30
-
31
-
32
-
33
-
34
-
35
- では、BOXの方に移ります。
36
-
37
-
38
-
39
1
  BOXのリファレンス上の[curlでのポスト例](https://developer.box.com/reference/post-files-content/#request-example)には
40
2
 
41
3
  ```