現在VBSでBOXのAPIのファイルアップロードを実行するスクリプトを作成しているのですが、
リファレンス内に挙げられているcurlコマンドでの例で指定されているオプション-Fで列挙されている2行の指定方法がわかりません。
どのようにすればよいかわかる方がおりましたらご助力をお願い致します。
APIリファレンス↓
https://ja.developer.box.com/reference/post-files-content/#param-attributes-name
curl
1//curlでの実行例 2curl -i -X POST "https://upload.box.com/api/2.0/files/content" \ 3 -H "Authorization: Bearer <ACCESS_TOKEN>" \ 4 -H "Content-Type: multipart/form-data" \ 5 -F attributes="{"name":"Contract.pdf", "parent":{"id":"11446498"}}" \ 6 -F file=@<FILE_NAME>
VBSでのhttpリクエストの方法は下記URLを参考にしています。
https://qiita.com/danishi/items/34d086fc466d5aa1df65
vbscript
1Set http = CreateObject("WinHttp.WinHttpRequest.5.1") 2 3With http 4 .Open "POST", "https://upload.box.com/api/2.0/files/content", False 5 .SetRequestHeader "Authorization", "Bearer " & token 6 .SetRequestHeader "Content-Type", "multipart/form-data" 7 .Send postdata 8End With
◆20210317追記◆
boundary設定バージョン
vbs
1postdata = "" 2postdata = postdata & "--------------------------ABCDEFG" & vbCrLf 3postdata = postdata & "Content-Disposition: form-data; name=""attributes""" & vbCrLf 4postdata = postdata & vbCrLf 5postdata = postdata & "{""name"":""api_upload.txt"", ""parent"":{""id"":""123456789""}}" & vbCrLf 6postdata = postdata & "--------------------------ABCDEFG" & vbCrLf 7postdata = postdata & "Content-Disposition: form-data; name=""file""" & vbCrLf 8postdata = postdata & vbCrLf 9postdata = postdata & "C:\Users\ユーザー\Desktop\abc.txt" & vbCrLf 10postdata = postdata & "--------------------------ABCDEFG--" & vbCrLf 11 12Set http = CreateObject("WinHttp.WinHttpRequest.5.1") 13 14With http 15 .Open "POST", "https://upload.box.com/api/2.0/files/content", False 16 .SetRequestHeader "Authorization", "Bearer " & token 17 .SetRequestHeader "Content-Type", "multipart/form-data; boundary=------------------------ABCDEFG" 18 .Send postdata 19End With
###◆20210318追記◆
下記の指定でアップロードに成功しました。
20210317追記でのコードとほぼほぼ同じな気がしますが…
vbs
1postdata = "" 2postdata = postdata & "--------------------------ABCDEFG" & vbCrLf 3postdata = postdata & "Content-Disposition: form-data; name=""attributes""" & vbCrLf 4postdata = postdata & vbCrLf 5postdata = postdata & "{""name"":""api_upload.txt"", ""parent"":{""id"":""1234567""}}" & vbCrLf 6postdata = postdata & "--------------------------ABCDEFG" & vbCrLf 7postdata = postdata & "Content-Disposition: form-data; name=""file""; filename=""abc.txt""" & vbCrLf 8postdata = postdata & "Content-Type: application/octet-stream" & vbCrLf 9postdata = postdata & vbCrLf 10postdata = postdata & "aiueo" & vbCrLf 11postdata = postdata & "--------------------------ABCDEFG--" 12 13Set http = CreateObject("WinHttp.WinHttpRequest.5.1") 14 15With http 16 .Open method, requestUrl, False 17 .SetRequestHeader "Authorization", "Bearer " & token 18 .SetRequestHeader "Content-Type", "multipart/form-data; boundary=------------------------ABCDEFG" 19 .Send postdata 20End With 21コード
###◆20210322追記(成功版)◆
バイナリファイルのアップロードのためにpostdataをバイナリ形式で送信する必要があったので、
下記URLを参考にしてみたところ、元のファイル情報を保持したままファイルのアップロードができました。
http://trash-area.com/archives/649
https://spirits.appirits.com/doruby/8783/
vbs
1filePath = "C:\Users\ユーザー\Desktop\test.pdf" 2forderId = "1234567" 3boundary = "------------------------ABCDEFG" 4 5'リクエストパラメータ生成 6postData = SetPostData() 7 8'HTTPリクエストオブジェクト 9Set http = CreateObject("WinHttp.WinHttpRequest.5.1") 10 11With http 12 .Open "POST", "https://upload.box.com/api/2.0/files/content", False 13 .SetRequestHeader "Authorization", "Bearer " & token 14 .SetRequestHeader "Content-Type", "multipart/form-data; boundary=" & boundary 15 .Send postData 16End With 17 18'------------------------------------------------------- 19Function SetPostData() 20 adTypeBinary = 1 21 adTypeText = 2 22 23 ' ファイル名取得 24 Set fso = CreateObject("Scripting.FileSystemObject") 25 filename = fso.GetFileName(filepath) 26 Set fso = Nothing 27 28 ' アップロードファイルをバイナリ形式で読込 29 Set stream = CreateObject("ADODB.Stream") 30 stream.Type = adTypeBinary 31 stream.Open 32 stream.LoadFromFile filePath 33 fileContents = stream.Read 34 stream.Close 35 36 stream.Type = adTypeText 37 stream.Charset = "UTF-8" 38 stream.Open 39 40 ' バイナリデータの前まで 41 ChangeStreamType stream, adTypeText 42 params = "" 43 params = params & "--" & boundary & vbCrLf 44 params = params & "Content-Disposition: form-data; name=""attributes""" & vbCrLf 45 params = params & vbCrLf 46 params = params & "{""name"":""" & filename & """, ""parent"":{""id"":""" & forderId & """}}" & vbCrLf 47 params = params & "--" & boundary & vbCrLf 48 params = params & "Content-Disposition: form-data; name=""file""; filename=" & filePath & vbCrLf 49 params = params & "Content-Type: application/octet-stream" & vbCrLf 50 params = params & vbCrLf 51 stream.WriteText params 52 53 ' バイナリデータ 54 ChangeStreamType stream, adTypeBinary 55 stream.Write fileContents 56 57 ' 最後 58 ChangeStreamType stream, adTypeText 59 stream.WriteText vbCrLf & "--" & boundary & "--" & vbCrLf 60 61 ChangeStreamType stream, adTypeBinary 62 stream.Position = 0 63 formData = stream.Read 64 stream.Close 65 66 SetPostData = formData 67End Function 68 69Function ChangeStreamType(stream, t) 70 p = stream.Position 71 stream.Position = 0 72 stream.Type = t 73 stream.Position = p 74 Set ChangeStreamType = stream 75End Function
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/03/16 15:23
2021/03/16 15:37
2021/03/17 09:07 編集
2021/03/17 09:32
2021/03/17 09:44
2021/03/17 09:51
2021/03/17 10:03
2021/03/17 10:19
2021/03/17 10:38
2021/03/17 10:47
2021/03/18 13:23
2021/03/18 15:12
2021/03/21 00:42
2021/03/22 01:35