本文介紹了Spring WebFlux文件上傳:不支持的媒體類型415,支持分塊上傳的處理方法,對大家解決問題具有一定的參考價值,需要的朋友們下面隨著小編來一起學習吧!
問題描述
我在使用Spring的反應性框架處理文件上傳時遇到了一些問題。我認為我正在遵循文檔,但無法擺脫此415
/Unsupported Media Type
問題。
我的控制器如下所示(如下面的示例:https://docs.spring.io/spring/docs/current/spring-framework-reference/web-reactive.html#webflux-multipart-forms)
package com.test.controllers;
import reactor.core.publisher.Flux;
import org.springframework.http.MediaType;
import org.springframework.http.codec.multipart.FilePart;
import org.springframework.http.codec.multipart.Part;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class TestController {
@RequestMapping(value = "/upload", method = RequestMethod.POST, consumes = MediaType.MULTIPART_FORM_DATA_VALUE, produces = MediaType.APPLICATION_JSON_VALUE)
public Flux<String> uploadHandler(@RequestBody Flux<Part> parts) {
return parts
.filter(part -> part instanceof FilePart)
.ofType(FilePart.class)
.log()
.flatMap(p -> Flux.just(p.filename()));
}
}
發送到此終結點時,始終會得到相同的輸出:
curl -X POST -F "data=@basic.ppt" http://localhost:8080/upload
---
"Unsupported Media Type","message":"Content type 'multipart/form-data;boundary=------------------------537139718d79303c;charset=UTF-8' not supported"
我也嘗試使用@RequestPart("data")
,但收到類似的Unsupported Media Type
錯誤,只是文件的內容類型不同。
似乎Spring在將它們轉換為Part
時遇到問題?我被困住了–任何幫助都是正確的!
推薦答案
感謝@Kojot的回答,但在這種情況下,我發現問題是除了spring-webflux
之外,我還短暫地包含了spring-webmvc
。您的解決方案可能也會奏效,但我想堅持使用控制器樣式,因此最終強制將spring-webmvc
排除在build.gradle
:
之外
configurations {
implementation {
exclude group: 'org.springframework', module: 'spring-webmvc'
}
}
之后,它按照文檔所述工作。
這篇關于Spring WebFlux文件上傳:不支持的媒體類型415,支持分塊上傳的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,