ファイルのアップロードAPIに関して

能見大二郎__434139

2018.02.08既読 7519

pythonでファイルのアップロードAPIを叩いていますが、ファイルがドライブにアップロードできません

 

1. ファイルはどのように送ればいいでしょうか?

パラメータ名の記載がなく、どのように添付すればいいのかAPIドキュメントではわからないのでご教示ください

 

2. Content-Typeはmultipart/mixedで大丈夫でだったでしょうか? 

 その際に、headerのboundaryにはどのような情報を設定すればよろしいでしょうか

 

3. Postmanを使用して送信した際に3011 Invalid data format になりますが、

 アップロードするファイルのデータフォーマットはどのように判断されているのでしょうか?

 file = ファイル選択で送信しております

 

ちなみにX-DRIVE-API-Typeにはreseller-apiのパラメータをセットしてあります

 

以上、よろしくお願いいたします

コメント11

  • 업데이트 된 답글입니다.

    LINE WORKS 公式アカウント

    ファイルはドキュメントに記載の通り"​Content-Type: multipart/mixed"でお送りいただければと思います。
    "Content-Typeはmultipart/mixed" でのファイルの送付方法はRFC(https://tools.ietf.org/html/rfc2046)参照。

    headerのboundaryに、区切り文字をご指定いただき、下記のように
    ​bodyに、指定した区切り文字で区切ったファイル情報をご指定ください。

    【body例(boundaryに”AbcdeFghjk”を指定した場合)】
    --AbcdeFghjk
    Content-Type: Image/Gif
    Content-Transfer-Encoding: base64
    Content-Description: Picture in Shibuya Office
    Content-Disposition: attachment; filename="shibuya.gif"

    <<Base64エンコードしたファイルの内容>>

    --AbcdeFghjk

    2018.02.08

    0
  • 업데이트 된 답글입니다.

    能見大二郎__434139 投稿者

    ありがとうございます

    header部分にContent-Type: multipart/mixed;boundary="AbcdeFghjk"
    body部に
    --AbcdeFghjk
    Content-Disposition: form-data; name="resourceName"

    aaaaaaaa.pdf

    --AbcdeFghjk

    --AbcdeFghjk
    Content-Type: application/pdf
    Content-Transfer-Encoding: base64
    Content-Disposition: attachment; filename="aaaaaaaa.pdf"

    <<Base64エンコードしたファイルの内容>>

    --AbcdeFghjk


    として、送信しましたが、3011 Invalid data format となってしまいます
    パラメータとファイルのデータは別々に送る必要がありますでしょうか?

    2018.02.09

    0
  • 업데이트 된 답글입니다.

    LINE WORKS 公式アカウント

    パラメータとファイルのデータは同時送信で問題ありませんが、
    ドキュメントに誤りがあり"toParentKey"のパラメータは必須となっております。大変申し訳ございません。
    (デフォルトでかまわない場合、"root"をご指定いただければと思います。)

    また、ご案内遅れましたが、PUTメソッドでは、
    ​"toParentKey"などのパラメータはクエリストリングで指定、
    Content-typeに送付するファイルのContent-typeを指定、
    Bodyにファイルの内容を指定、
    で対象のAPIをご利用頂けます。

    ご確認くださいませ。

    2018.02.09

    0
  • 업데이트 된 답글입니다.

    能見大二郎__434139 投稿者

    ありがとうございます
    以下のcurlコマンドで送信したのですが、一時的にファイルがロックされた状態でつくられるものの、最終的にはエラーになってしまいます

    -----------------------------------------------------------------------------------------------
    curl -X POST -H 'consumerKey:[コンシューマキー]' -H 'Content-Type:multipart/mixed;boundary=bound@ry_' -H 'Authorization: Bearer [ユーザーのaccess_token]' -H 'X-DRIVE-API-TYPE: reseller-api' --data 'isRetResouceKey=true&resourceName=aaa.txt&toParentKey=root&writeMode=overwrite' --data 'Content-Transfer-Encoding: base64\rContent-Disposition: attachment; name="file"; filename="aaa.txt"\rContent-Type: text/plain\r\rMQo=\r------------bound@ry_--\r'
    -s -v -k https://jp1-file.drive.worksmobile.com/file/upload.api
    -----------------------------------------------------------------------------------------------

    * upload completely sent off: 287 out of 287 bytes
    * Empty reply from server
    * Connection #0 to host jp1-file.drive.worksmobile.com left intact

    レスポンスが帰ってきていないようなのですが、何かわかりますでしょうか

    2018.02.13

    0
  • 업데이트 된 답글입니다.

    能見大二郎__434139 投稿者

    また、pythonから送信すると
    requests.exceptions.ConnectionError: ('Connection aborted.', BadStatusLine("''",))
    となってしまう件も同様の問題になりますでしょうか?

    2018.02.13

    0
  • 업데이트 된 답글입니다.

    LINE WORKS 公式アカウント

    不具合のご連絡ありがとうございます。
    ドキュメントが分かりにくく申し訳ないのですが、POSTをご利用の場合、パラメータは個々に設定いただく必要があります。
    ============================​
    ・・・(前略)​
    --[boundary荷指定した文字列]
    Content-Disposition: form-data; name="resourceName"

    filename.pdf
    --[boundary荷指定した文字列]
    Content-Disposition: form-data; name="toParentKey"

    root
    --[boundary荷指定した文字列]
    Content-Disposition: form-data; name="writeMode"

    none
    --[boundary荷指定した文字列]
    ・・・(後略)​
    ============================
    ただ、ご指摘いただいた使い方の場合、エラーの返し方がよろしくないことには間違いないので追って修正させていただきます。
    POSTについては、他の不具合も確認させていただきますので、PUTをご利用して試していただくことは可能でしょうか。

    PUTの場合には、前述の通りURLのQueryにAPI指定のパラメータ設定、BODYに送付するファイルの内容を
    お送りいただければファイルアップロードが可能です。

    お手数をおかけしてしまい大変申し訳ございません。​

    2018.02.15

    0
  • 업데이트 된 답글입니다.

    能見大二郎__434139 投稿者

    アップロードに関してはPUTで問題なくできたのですが、アップロードに成功したファイルをブラウザから開いたLINEWORKSのドライブの画面からダウンロードしてくると壊れているようです

    ============================​
    curl -X PUT -H 'consumerKey:[コンシューマキー]' -H 'Content-Type:multipart/mixed;boundary=bound@ry_' -H 'Authorization: Bearerr [ユーザーのaccess_token]' -H 'X-DRIVE-API-TYPE: reseller-api' --data '--bound@ry_\r\nContent-Type: text/plain\r\nContent-Transfer-Encoding: base64\r\nContent-Disposition: attachment; name="file";filename="aaa.txt"\r\n\r\nMQ==\r\n\r\n--bound@ry_' --url 'https://jp1-file.drive.worksmobile.com/file/upload.api?toParentKey=root&resourceName=aaa.txt&writeMode=overwrite&isRetResouceKey=true'
    ============================

    ちなみにアップロードに成功したテキストファイルをダウンロードしてきて
    テキストエディタで確認するとの中身はこうなっています
    ============================
    --bound@ry_
    Content-Type: text/plain
    Content-Transfer-Encoding: base64
    Content-Disposition: attachment; name="file";filename="aaa.txt"

    MQ==

    --bound@ry_
    ============================

    2018.02.16

    0
  • 업데이트 된 답글입니다.

    能見大二郎__434139 投稿者

    ちなみに、文字列のBASE64変換の確認には以下のサイトを使いました。
    https://hogehoge.tk/tool/

    2018.02.16

    0
  • 업데이트 된 답글입니다.

    LINE WORKS 公式アカウント

    PUTメソッド利用時の各パラメータの指定について、分かりにくい説明大変失礼致しました。
    ・APIに必要な各パラメータ("toParentKey"など)をQueryに指定
    ・HeaderのContent-Type等には、アップロードするファイルについての内容を指定
    ・Bodyにファイルの内容を指定
    となります。

    例えば、下記の通りリクエストを送付した場合、
    ==========
    PUT /file/upload.api?toParentKey=root&resourceName=aaa.txt&writeMode=overwrite&isRetResouceKey=true HTTP/1.1
    Host: jp1-file.drive.worksmobile.com
    X-DRIVE-API-TYPE: reseller-api
    consumerKey: [コンシューマーキー]
    Authorization: Bearer [ユーザのアクセストークン]
    Content-Type: text/plain; charset=UTF-8
    (中略)

    aaaaa
    ==========
    「aaaaa」という内容で「aaa.txt」のファイル名の、テキストファイルが作成されます。

    ※base64エンコードは必須ではございません。例示で利用して混乱を招いてしまい申し訳ございませんでした。

    2018.02.16

    0
  • 업데이트 된 답글입니다.

    能見大二郎__434139 投稿者

    ありがとうございます
    アップロードできるようになりました。

    また、別件で申し訳ないのですが、ファイルを共有したリンクURL(短縮URL)からresourceKeyを特定する方法はありますでしょうか?

    2018.02.19

    0
  • 업데이트 된 답글입니다.

    LINE WORKS 公式アカウント

    ご確認ありがとうございます。
    共有されたリンクのURLからresourceKeyを特定する方法はございません。
    ご了承ください。

    2018.02.19

    0
前の投稿 Page not foundの対応方法について
次の投稿トークBot API v1の終了時期について
リスト

まだ、解決できませんか?
今すぐ実際に使用しているLINE WORKSユーザーに質問してみましょう。