My Spring Boot 1.5.1 + Commons Fileupload 1.3.2ファイルのアップロード要求のマッピングが、multipart/form-data
で失敗します。 curl
とSpringブート1.5:ファイルアップロードで「multipart/*」を受け入れる
@RequestMapping(method=RequestMethod.POST, value="/api/users/uploads")
public @ResponseBody ResponseEntity<?> uploadUsers(
@RequestParam(value="file", required=true) MultipartFile file
) throws IOException {
String uploadFilename = file.getName();
try(InputStream input = file.getInputStream()) {
usersConverter.read(input);
}
return ResponseEntity.ok("Uploaded " + uploadFilename + " successfully.");
}
:
curl -v -u 'username:password'
-H "Content-Type: multipart/mixed"
-X POST -F [email protected]
http://localhost:8080/api/users/uploads
正常に動作します
:マイリクエストマッピングは次のようになり
* Trying ::1...
* Connected to localhost (::1) port 8080 (#0)
* Server auth using Basic with user 'username'
> POST /api/users/uploads HTTP/1.1
> Host: localhost:8080
> Authorization: Basic cGFzc3dvcmQ=
> User-Agent: curl/7.42.1
> Content-Length: 8237
> Expect: 100-continue
> Content-Type: multipart/mixed; boundary=-------------------4c6cae60d33268be
>
< HTTP/1.1 100 Continue
< HTTP/1.1 200
< X-Content-Type-Options: nosniff
< X-XSS-Protection: 1; mode=block
< Cache-Control: no-cache, no-store, max-age=0, must-revalidate
< Pragma: no-cache
< Expires: 0
< X-Frame-Options: DENY
< Set-Cookie: JSESSIONID=8F80A63F1B83982DA1614ADD7BCB6C16;path=/;HttpOnly
< Content-Type: text/plain;charset=UTF-8
< Content-Length: 27
< Date: Thu, 16 Mar 2017 17:39:51 GMT
<
* Connection #0 to host localhost left intact
が、私はmultipart/form-data
の代わりmultipart/mixed
を送信するいくつかのクライアントを持っていると私と思いますこのリクエストマッピングのように両方を処理します。私は@RequestMapping
に以下を追加しようとしました:
consumes="multipart/*"
consumes={"multipart/mixed", "multipart/form-data"
headers="content-type=multipart/*"
headers={"content-type=multipart/mixed", "content-type=multipart/form-data"}
が、それぞれのケースで:
curl -v -u 'username:password'
-H "Content-Type: multipart/form-data"
-X POST -F [email protected]
http://localhost:8080/api/users/uploads
は400
で失敗します。multipart/form-data
を送信
* Trying ::1...
* Connected to localhost (::1) port 8080 (#0)
* Server auth using Basic with user 'username'
> POST /api/users/uploads HTTP/1.1
> Host: localhost:8080
> Authorization: Basic cGFzc3dvcmQ=
> User-Agent: curl/7.42.1
> Content-Length: 8237
> Expect: 100-continue
> Content-Type: multipart/form-data; boundary=-------------------85d8a22839d9bc08
>
< HTTP/1.1 100 Continue
< HTTP/1.1 400
< X-Content-Type-Options: nosniff
< X-XSS-Protection: 1; mode=block
< Cache-Control: no-cache, no-store, max-age=0, must-revalidate
< Pragma: no-cache
< Expires: 0
< X-Frame-Options: DENY
< Set-Cookie: JSESSIONID=1EB31D866907E49F0972F601E22317D0;path=/;HttpOnly
< Content-Length: 0
< Date: Thu, 16 Mar 2017 17:42:00 GMT
< Connection: close
<
* Closing connection 0
マイ角度2.4クライアントは、(おそらく同じ)400
で失敗します。
どのように私はmultipart/form-data
を処理するリクエストマッピングを得ることができますか?
このリンク[spring upload file](https://www.mkyong.com/spring/curl-post-request-examples/)にご確認ください。たぶんあなたのカールは間違っています。 –
@MatejMarconak - 'curl'コマンドが正しいと思われます。これは 'mixed 'で動作しますが、' form-data'では動作しません - それは両者の唯一の違いです。そしてどちらの場合も 'curl'は必要な' boundary'値を追加します。そして、私は 'mixed 'の代わりに' form-data'を提供するnon-'curl'クライアントから同じ' 400'を取得します。 –
400:BAD REQUEST - jsからの呼び出しを試すことができますか?春の定義はOKです。 –