web-dev-qa-db-ja.com

MultipartException:現在のリクエストはマルチパートリクエストではありません

ファイルをアップロードするための安らかなコントローラーを作成しようとしています。 this を見て、このコントローラーを作成しました:

@RestController
public class MaterialController {

    @RequestMapping(value="/upload", method= RequestMethod.POST)
    public String handleFileUpload(
            @RequestParam("file") MultipartFile file){
        String name = "test11";
        if (!file.isEmpty()) {
            try {
                byte[] bytes = file.getBytes();
                BufferedOutputStream stream =
                        new BufferedOutputStream(new FileOutputStream(new File(name + "-uploaded")));
                stream.write(bytes);
                stream.close();
                return "You successfully uploaded " + name + " into " + name + "-uploaded !";
            } catch (Exception e) {
                return "You failed to upload " + name + " => " + e.getMessage();
            }
        } else {
            return "You failed to upload " + name + " because the file was empty.";
        }
    }
}

そして、郵便配達員を使用してpdfを送信しました:

enter image description here

しかし、サーバーは次のエラーでクラッシュします。

.MultipartException: Current request is not a multipart request

繰り返しますが、 this を見つけ、bean.xmlファイルを追加しました

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">

    <bean id="multipartResolver"
          class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
    </bean>
</beans>

残念ながら、それでも同じエラーが表示されます。

27

マルチパートリクエストにPostmanを使用している場合は、ヘッダーにカスタムContent-Typeを指定しないでください。したがって、Postmanの[ヘッダー]タブは空でなければなりません。 Postmanはフォームデータの境界を決定します。 PostmanのBodyタブで、form-dataを選択し、ファイルタイプを選択する必要があります。関連するディスカッションは https://github.com/postmanlabs/postman-app-support/issues/576 で見つけることができます。

34
abaghel

問題は、サーバーへのリクエストがマルチパートリクエストではないようです。基本的に、クライアント側のフォームを変更する必要があります。例えば:

<form action="..." method="post" enctype="multipart/form-data">
  <input type="file" name="file" />
</form>

お役に立てれば。

6
Javier Z.

Postmanmultipartでも同じ問題に直面していました。次の手順を実行して修正しました。

  • HeadersセクションでContent-Typeを選択しないでください。
  • BodyPostmanタブで、form-dataを選択し、file typeを選択する必要があります。

それは私のために働いた。

2
Nilesh Kumar

Application.propertiesで、これを追加してください:

spring.servlet.multipart.max-file-size=128KB
spring.servlet.multipart.max-request-size=128KB
spring.http.multipart.enabled=false

そして、あなたのHTMLフォームでは、enctype="multipart/form-data"が必要です。例えば:

<form method="POST" enctype="multipart/form-data" action="/">

このヘルプを願っています!

1
N.Luan Pham

aRC(高度なレストクライアント)で-動作するように以下を指定しますContent-Type multipart/form-data(ヘッダー名とヘッダー値) REST仕様を選択し、ファイルセレクタからアップロードするファイルを選択します。

0
Pravin