Community

  • 投稿


    Daichi Shirakawa

    /api/1/receipts ファイルボックス 証憑ファイルアップロード の利用法について

    Node.js 環境から API経由でファイルをアップロードしようとしていますが、

    /api/1/receipts の利用に関して、どのように工夫しても 以下のエラーが脱却できません。

     

    > {“status_code”:400,”errors”:[{“type”:”validation”,”messages”:[“receipt は String で指定してください。”]}]}

     

    Node.js 環境にて axios を用いて以下のように実行しています。

    const path = “/path/to/pdf.pdf”;

    const buf = fs.readFileSync(path);

    const receipt = buf.toString(“binary”); // この出力が Blob String となる理解

    await i.axios.post(
    “/receipts”,
    {
    company_id: “xxxxxx”,
    description: “test description”,
    issue_date: new Date(),
    receipt,
    },
    {
    headers: { 
    accept: “application/json”,
    Authorization: Bearer xxxxxx,
    },
    }
    )

     

    過去の質問

    receiptに指定する情報

    ファイルボックスへの証憑アップロードに関するエラーメッセージ

    ファイルボックスへの証憑アップロードに関するエラーメッセージ2

     

    から察するに、receipt フィールドへは Blob 形式データを指定するべきものだと理解していますが、一向に動作いたしません。

    そこで質問といたしましては、

     

    1. こちら、具体的に「Stringで指定」とはどのような形式を要求されていますでしょうか?

    2. 添付いたしました “test.pdf” に対応した、実際の receipt Stringデータのサンプルをいただきたいです

    3. 可能なら Node.js 環境で、ローカルのファイルを指定してアップロードする際の動作コードの例をいただきたいです

     

    以上、1と2をできるだけ早く、その後可能であれば3もお返事頂けると幸いです。

    よろしくお願いいたします。

    添付ファイル:
    添付ファイルを参照するにはログインしてください。

    回答するにはログインが必要です。

    回答


    yakumo

    > 1. こちら、具体的に「Stringで指定」とはどのような形式を要求されていますでしょうか?

    バイナリデータを文字列に変換して送ってくれとの意味かと思われます。

    根本解決ですがこちらのサイトが参考になりそうです。
    いかがでしょうか?
    ※ 自身は動作未確認

    https://qiita.com/itoudium/items/d9f04f379d34265387d8
    https://r17n.page/2020/02/04/nodejs-axios-file-upload-api/

    Google にて『バイナリ post string』でぐぐって上位に出てきた記事です。


    Daichi Shirakawa

    ご回答ありがとうございます。

    すでに、提示いただいたqiitaに似た解決方法でアップロードを実現できています。

    const form = new FormData();
    const receipt = fs.createReadStream(filepath);

    form.append(“company_id”, this.meta.freee_company_id);
    form.append(“description”, fileKey);
    form.append(“receipt”, receipt);

    await this.axios
    .post(“/receipts”, form, {
    headers: {
    …form.getHeaders(),
    },
    });

    したがって、

    > 3. 可能なら Node.js 環境で、ローカルのファイルを指定してアップロードする際の動作コードの例をいただきたいです

    を取り下げます。

     

    継続して、何故動かなかったのか、何故これで動くのかを理解するために、

    以下、freeeとして公式にも提示いただいたうえで、

    そのうちリファレンスとして欠けている情報があるならば、ご反映いただければと思います。

    > 1. こちら、具体的に「Stringで指定」とはどのような形式を要求されていますでしょうか?

    > 2. 添付いたしました “test.pdf” に対応した、実際の receipt Stringデータのサンプルをいただきたいです

     


    Daichi Shirakawa

    補足いたします。

    > 2. 添付いたしました “test.pdf” に対応した、実際の receipt Stringデータのサンプルをいただきたいです

     

    リファレンス的にはrequest content type として application/json に対応されているとのことで、

    可能ならその前提で扱いたいため、こちら、 application/json 形式でいただけると嬉しいです

    freee dev-support
    freee dev-support

    ご質問ありがとうございます。

    > 1. こちら、具体的に「Stringで指定」とはどのような形式を要求されていますでしょうか?

    リファレンスがわかりづらくお手数おかけしました。
    仕様にはリクエスト/レスポンスともに JSON と記載がありますが。
    参考頂いた記事等で紹介されている、
    content-type: multipart/form-data
    形式で引き続きご利用ください。

    またリファレンスの改善提案をフィードバックいたしました。
    ご指摘ありがとうございます。

    > 2. 添付いたしました “test.pdf” に対応した、実際の receipt Stringデータのサンプルをいただきたいです

    特定の言語・コードに関する事項は、
    一般的な技術サポートとなってしまうため、公式でのサポートは対象外となってしまします。
    こちらのコミュニティや技術者コミュニティで解決いただけると幸いです。

    ご確認よろしくお願いいたします。