LINE WORKS Developers

コミュニティ

LINE WORKSのテクニカルエキスパート及び開発者と
コードのサンプル、リソース、Tip等を共有し問題解決への相談が可能です。

??dev_메인_타이틀_모바일_ja_JP??

Drive

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

画像

能見大二郎__434139

2018.02.08既読 1008

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
  • ありがとうございます

    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
  • ありがとうございます
    以下の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
  • また、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
  • アップロードに関しては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
  • ちなみに、文字列の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
  • ありがとうございます
    アップロードできるようになりました。

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

    2018.02.19

    0
  • 画像

    LINE WORKS 公式アカウント

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

    2018.02.19

    0