【问题标题】:apache fileupload parserequest doesn't return filelistapache fileupload parserequest 不返回文件列表
【发布时间】: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


【解决方案1】:

我用 XMLRootElement 创建了对象,并在对象中发送了文件引用。使用 REST 服务可以快速选择文件引用。

REST 客户端

 File srcFile = new File("C:/Temp/hellotest.jpg");
 FileInputStream inputStream = new FileInputStream(srcFile);
 byte[] bytes = IOUtils.toByteArray(inputStream);               
 inputStream.close();
 FileInfo requestEntity = new FileInfo();
 requestEntity.setPath("C:/Temp/hellotest12.jpg");
 requestEntity.setContent(bytes);
 RestTemplate restTemplate = new RestTemplate();                
ResponseEntity<String> response = restTemplate.postForEntity("http://localhost:9080/contextroot/restservice.htm",requestEntity, String.class);

REST 服务

@RequestMapping(value = "restservice.htm")
public String restservice(@RequestBody FileInfo fileInfo, HttpServletResponse response, HttpServletRequest request) {
    LOG.info("File created @ " + fileInfo.getPath());
    File file = new File(fileInfo.getPath());

    OutputStream outputStream = new FileOutputStream(file);
    IOUtils.write(fileInfo.getContent(), outputStream);
    outputStream.flush();
    outputStream.close();


     return message;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-12-02
    • 2011-01-10
    • 2017-02-07
    • 2014-07-20
    • 2013-07-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多