在我的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控制器中获取文件可能出现的问题。
服务器类/ 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.在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)
答案 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将包含有关多部分请求部分的所有信息。