我有一个带有文件上传表单的jsp,我想将此请求发送到Apache Camel servlet,处理请求并将文件进一步发送到另一条路径。
输入表格:
<form action="camel/upload" method="post" enctype="multipart/form-data">
<input type="text" name="desc" />
<input type="file" name="file" />
<input type="submit" />
</form>
Camel servlet路由:
<route id="uploadRoute" streamCache="true">
<from uri="servlet:upload?httpMethodRestrict=POST"/>
<process ref="fileProcessor"/>
<to uri="direct:inputMessages"/>
</route>
在fileProcessor bean中我有:
public void process(Exchange ex) throws Exception {
HttpServletRequest req = ex.getIn().getHeader(Exchange.HTTP_SERVLET_REQUEST , HttpServletRequest.class);
String desc = req.getParameter("desc");
System.out.println(desc);
Part part = req.getPart("file");
}
这里desc为null,getPart抛出异常:
java.io.IOException: org.apache.tomcat.util.http.fileupload.FileUploadException: Stream closed
如果我将交换体转换为String,我会看到有效的数据:
------ WebKitFormBoundaryqMDEm1jQr38BDpYP 内容处理:表格数据;名称= “desc” 的
一些描述 ------ WebKitFormBoundaryqMDEm1jQr38BDpYP 内容处理:表格数据; NAME = “文件”;文件名= “myfile.txt的” 内容类型:text / plain
结束上传 ------ WebKitFormBoundaryqMDEm1jQr38BDpYP -
我想将交换机构设置为 part.getInputStream() 并发送到文件处理路径。
这是这样做的方法吗?我怎么能解决上面的例外?