当文件通过apache httpclient传递时,无法使用spring控制器读取Multipart文件

时间:2014-04-16 16:27:15

标签: apache-commons-httpclient

在我的UI页面上,我试图通过在我的html表单上设置enctype =“multipart / form-data”和encoding =“multipart / form-data”来上传一个文件。

能够使用org.apache.commons.fileupload.servlet.ServletFileUpload API在我的服务器类(servlet)中成功读取文件内容。

之后我试图使用apache commons Httpclient使用其muiltpart选项将文件或其内容传递到另一台服务器,我可以验证内容是否被传递到另一层(通过检查请求正文内容或验证请求)在chrome开发人员工具中)

但是在另一个服务器层(基于弹簧的控制器)上,当尝试读取上传的文件时,通过但不获取内容。相反,它说“不存在所需的MultipartFile参数'fileContents'。”

请你帮我解决一下因为没有在Spring控制器中获取文件可能出现的问题。

  1. 服务器类/ servlet将文件发布到不同服务器的实现:

    HttpMethod httpMethod = new PostMethod(epsURL);
    
    String contentTypeRequested = request.getContentType();
    
    httpMethod.setRequestHeader("Content-type", contentTypeRequested);
    
        if(isMultipart){
    String content = getUploadFileContents(request);
    File file = null;
    try {
        file = new File("fileContents");
        if (!file.exists()) {
            file.createNewFile();
        }
        FileWriter fw;
        fw = new FileWriter(file.getAbsoluteFile());
        BufferedWriter bw = new BufferedWriter(fw);
        bw.write(content.toString());
        bw.close();
    } catch (IOException e1) {
        e1.printStackTrace();
    }
    try{
        Part[] parts = {
            new FilePart(file.getName(), file)
        };
    
        MultipartRequestEntity multipart = new MultipartRequestEntity(parts, httpMethod.getParams());
        ((PostMethod) httpMethod).setRequestEntity(multipart);
    
    }catch(Exception e){
        e.printStackTrace();
    }
    }
    
  2. 2.在context-config.xml中更改spring图层:

    <bean id="multipartResolver"  class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
        <property name="maxUploadSize" value="100000"/>
        <property name="maxInMemorySize" value="100000"/>
    </bean>
    

    3.弹簧控制器实施:

    @RequestMapping(method = RequestMethod.POST, value = "/type/details")
    public
    void getTypeDetails(
            @RequestParam("fileContents") MultipartFile file,
            HttpServletRequest httpRequest) {
    /// some business logic here based on file object.
    }
    

    我收到以下错误:

    错误: 2014-04-16 16:28:51,638 [http-bio-8080-exec-2] ERROR com.MyControllerImpl - Exception Occured :: org.springframework.web.bind.MissingServletRequestParameterException:必需的MultipartFile参数' fileContents '不存在     在org.springframework.web.method.annotation.RequestParamMethodArgumentResolver.handleMissingValue(RequestParamMethodArgumentResolver.java:208)

1 个答案:

答案 0 :(得分:0)

我发现如果你想在你的控制器中找到没有名字的Multipart文件,你可以尝试这样的事情:

@RequestMapping(method = RequestMethod.POST, value = "/type/details")
public
void getTypeDetails( any other parameters,
        MultipartRequest request) {
/// some business logic here based on file object.
}

MiltipartRequest将包含有关多部分请求部分的所有信息。