質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

89.64%

【Spring Boot】サイズが大きいファイルをaxiosでpostできない

受付中

回答 0

投稿 編集

  • 評価
  • クリップ 1
  • VIEW 298

ssssskkkkk

score 18

【Spring Boot】サイズが大きいファイルをaxiosでpostできない

Spring BootでWebアプリケーションを作成しているのですが、 サイズが大きいファイルをaxiosでpostすると以下のエラーが表示されてしまいます。

java.lang.IllegalStateException: The multi-part request contained parameter data (excluding uploaded files) that exceeded the limit for maxPostSize set on the associated connector

以下はリクエストを送信しているコードです。

const formData = new FormData();
formData.append("video", rawData);    //rawDataには動画のデータが格納されています。
axios.post(routes.videos.store(), formData, {
    headers: {
        'content-type': 'multipart/form-data',
    },
}).then(response => {
    console.log(response);
});

以下はリクエストを受け付けるコントローラです。

@RequestMapping(value = "videos", method = RequestMethod.POST)
public String store(@RequestParam("video") MultipartFile video) {
    // 具体的な処理は省略します。
}

axiosからではなく、formを用いて送信した場合には、上記のエラーは発生しませんでした。
formを用いて送信した場合のコードは以下です。

<form th:action="@{/videos}" method="post" enctype="multipart/form-data">
    <input type="file" name="video">
    <input class="btn btn-primary" type="submit" value="アップロード" accept="video/*">
</form>

application.propertiesの設定

spring.servlet.multipart.max-file-size=320000000MB
spring.servlet.multipart.max-request-size=64000000MB


maxPostSizeを増やすために上記のようにapplication.propertiesを修正してみたのですが、やはり上記のエラーが表示されてしまいました。

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

追記

・確認に用いているファイルサイズ: 15.7MB
・Spring Bootのバージョン: 2.2.2
・サーブレットコンテナ: Tomcat
・java -version

openjdk version "1.8.0_212"
OpenJDK Runtime Environment (IcedTea 3.12.0) (Alpine 8.212.04-r0)
OpenJDK 64-Bit Server VM (build 25.212-b04, mixed mode)


・curlで送信した場合
エラーは表示されませんでしたが、ファイルも保存されませんでした。
以下のコマンドで確認を行いました。

curl -X POST http://localhost:8080/videos -F "video=@/app/src/main/resources/static/videos/sample.mp4"
  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正の依頼

  • rubytomato

    2019/12/22 17:14

    下記の点について教えてください。

    1) エラーが発生するファイルサイズ
    2) Spring Bootのバージョンとサーブレットコンテナの種類
    3) Javaのバージョン
    4) curl等のコマンドでアップロードした時の結果

    キャンセル

  • ssssskkkkk

    2019/12/22 17:54

    質問文の最後に追記しました。
    よろしくお願いいたします。

    キャンセル

  • rubytomato

    2019/12/22 18:34

    追記ありがとうございました。

    下記の環境で再現するか確認してみましたが、質問内容に記載のエラー(IllegalStateException)は起きませんでした。
    ・OpenJDK 11
    ・Spring Boot 2.2.2
    ・Tomcat 9.0.29 (embedded)

    アプリケーション設定ファイルに下記のように10MBと指定すれば

    spring.servlet.multipart.max-file-size = 10MB
    spring.servlet.multipart.max-request-size = 10MB

    10MBまでのファイルのアップロードは可能で、10MBを超えた場合は

    org.apache.tomcat.util.http.fileupload.FileUploadBase$SizeLimitExceededException: the request was rejected because its size (11541901) exceeds the configured maximum (10485760)

    という例外が発生します。

    アップロードはcurl と axios で行いました。
    なお、axiosでのファイルアップロード処理は質問内容に記載のコードとほぼ同様です。

    サーバー側(Spring Boot側)も、特にコンフィグレーションクラスは作成しておらず、Spring Initializrで作成したひな型アプリケーションにファイルを受けるコントローラークラスを追加しただけのものです。

    なので、回答に値する情報はありませんが、エラーが再現するミニマムセットのプロジェクト情報をご提示いただければ、もう少し調べられるかもしれません。

    キャンセル

まだ回答がついていません

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 89.64%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる