【发布时间】:2016-11-21 16:39:56
【问题描述】:
我正在尝试公开 REST 服务以进行文件上传并编写 REST 客户端来调用该服务。我正在使用 apache fileupload 来使用文件,因为我当前的应用程序很旧并且属于 2.5 的 servlet api 时代。当我调用 ServletFileUpload 的 parseRequest 方法时,它不会从请求中返回任何文件并抛出错误对象。此应用程序还支持 Spring 4。
休息客户端
HttpHeaders httpHeaders = new HttpHeaders();
httpHeaders.setContentType(MediaType.MULTIPART_FORM_DATA);
MultiValueMap<String, Object> parts = new LinkedMultiValueMap<String, Object>();
parts.add("file", new ByteArrayResource(file.getBytes()));
parts.add("path", "C:/Temp/link.txt");
RestTemplate restTemplate = new RestTemplate();
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.MULTIPART_FORM_DATA);
headers.setContentDispositionFormData("filename","link.txt");
HttpEntity<MultiValueMap<String, Object>> requestEntity = new HttpEntity<MultiValueMap<String, Object>>(parts, headers);
ResponseEntity<String> response = restTemplate.postForEntity("http://localhost:9080/contextroot/restservice.htm",requestEntity, String.class);
Servlet 休息服务
@RequestMapping(value = "restservice.htm")
public ResponseMessage restservice(HttpServletRequest request,
HttpServletResponse response) throws IOException, ServletException, FileUploadException {
if(ServletFileUpload.isMultipartContent(request)) {
FileItemFactory factory = new DiskFileItemFactory();
ServletFileUpload upload = new ServletFileUpload(factory);
List<FileItem> fileList = upload.parseRequest(request);
System.out.println("Headers : ");
Enumeration<String> headerEnumeration = request.getHeaderNames();
while(headerEnumeration.hasMoreElements()) {
String headerName = headerEnumeration.nextElement();
System.out.println("Name : " + headerName + ", Value : " + request.getHeader(headerName));
}
System.out.println("Parameters : ");
Enumeration<String> paramEnumeration = request.getParameterNames();
while(paramEnumeration.hasMoreElements()) {
String paramName = paramEnumeration.nextElement();
System.out.println("Name : " + paramName + ", Value : " + request.getParameter(paramName));
}
if(null == fileList || fileList.isEmpty()) {
//Setting ERROR
}
else {
//Setting SUCCESS
}
}
else {
//Setting ERROR
}
return message;
}
标题的输出是
Name : Accept, Value : text/plain, application/json, application/*+json, */*
Name : Content-Type, Value : multipart/form- data;boundary=CqVx3AfV3oq7XjEPmPkWXqve9lNs3Ntjhz1kBaI
Name : Content-Disposition, Value : form-data; name="filename"; filename="link.txt"
请求参数包含路径和文件引用。
【问题讨论】:
-
通常您会发布错误消息。当你说它“抛出错误对象”时,很难帮助你。
标签: spring spring-mvc file-upload