我正在尝试使用带有postman chrome附加组件的spring boot和webservices。
在邮递员content-type="multipart/form-data"
中,我得到以下例外情况。
HTTP Status 500 - Request processing failed;
nested exception is org.springframework.web.multipart.MultipartException: Could not parse multipart servlet request;
nested exception is java.io.IOException:
org.apache.tomcat.util.http.fileupload.FileUploadException: the request was rejected because no multipart boundary was found
在Controller中我指定了以下代码
@ResponseBody
@RequestMapping(value = "/file", headers = "Content-Type= multipart/form-data", method = RequestMethod.POST)
public String upload(@RequestParam("name") String name,
@RequestParam(value = "file", required = true) MultipartFile file)
//@RequestParam ()CommonsMultipartFile[] fileUpload
{
// @RequestMapping(value="/newDocument", , method = RequestMethod.POST)
if (!file.isEmpty()) {
try {
byte[] fileContent = file.getBytes();
fileSystemHandler.create(123, fileContent, name);
return "You successfully uploaded " + name + "!";
} catch (Exception e) {
return "You failed to upload " + name + " => " + e.getMessage();
}
} else {
return "You failed to upload " + name + " because the file was empty.";
}
}
这里我指定文件处理程序代码
public String create(int jonId, byte[] fileContent, String name) {
String status = "Created file...";
try {
String path = env.getProperty("file.uploadPath") + name;
File newFile = new File(path);
newFile.createNewFile();
BufferedOutputStream stream = new BufferedOutputStream(new FileOutputStream(newFile));
stream.write(fileContent);
stream.close();
} catch (IOException ex) {
status = "Failed to create file...";
Logger.getLogger(FileSystemHandler.class.getName()).log(Level.SEVERE, null, ex);
}
return status;
}
答案 0 :(得分:71)
问题是你自己设置Content-Type,让它为空。谷歌Chrome将为您完成。 multipart Content-Type需要知道文件边界,当你删除Content-Type时,Postman会自动为你做。
答案 1 :(得分:13)
取消选中Postman中的内容类型,邮递员会根据您在运行时输入的内容自动检测内容类型。
答案 2 :(得分:10)
答案 3 :(得分:2)
"邮递员 - REST客户端"不适合使用设置content-type进行后期操作。您可以尝试使用"高级REST客户端"或其他人。
此外,自Spring 3.1 M2以来,标题已被消耗和替换,请参阅https://spring.io/blog/2011/06/13/spring-3-1-m2-spring-mvc-enhancements。您可以直接使用produces = MediaType.MULTIPART_FORM_DATA_VALUE
。
答案 4 :(得分:1)
答案 5 :(得分:0)
答案 6 :(得分:0)
当我使用邮递员将5.6M的文件发送到外部网络时,遇到了同样的麻烦。 (在我自己的计算机和本地测试环境上成功执行了相同的操作。) 检查所有服务器配置和HTTP标头后,我发现原因是Postman可能难以对外部HTTP请求进行模拟请求。 最后,我在chrome html页面上成功执行了sendfile请求。 只是作为参考:)
答案 7 :(得分:0)
我遇到了这个问题,因为我使用了基于axios编写的request.js
而且我已经在request.js中设置了defaults.headers
import axios from 'axios'
const request = axios.create({
baseURL: '',
timeout: 15000
})
service.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded'
这是我解决这个问题的方式
代替
request.post('/manage/product/upload.do',
param,config
)
我使用axios直接发送请求,并且没有添加配置
axios.post('/manage/product/upload.do',
param
)
希望这可以解决您的问题
答案 8 :(得分:0)