我尝试读取通过浏览上传的文件。为此,我正在使用 apache commons fileupload jar。因此,在使用项目应用程序运行它之前,我只需执行一个成功读取文件的 servlet/jsp POC 项目。下面是代码,
protected void doPost(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
boolean isMultipart = FileUpload.isMultipartContent(request);
String content = "";
try {
if (isMultipart) {
FileItemFactory factory = new DefaultFileItemFactory();
FileUploadBase upload = new FileUpload(factory);
String[] arr;
List items;
items = upload.parseRequest(request);
Iterator iter = items.iterator();
while (iter.hasNext()) {
FileItem item = (FileItem) iter.next();
if (!item.isFormField()) {
BufferedInputStream buff = new BufferedInputStream(
item.getInputStream());
byte[] bytes = new byte[buff.available()];
buff.read(bytes, 0, bytes.length);
content = new String(bytes);
arr = content.split(",");
}
}
}
request.getRequestDispatcher("success.jsp").forward(request,
response);
} catch (FileUploadException e) {
}
我使用了 jar 版本 1.1,因为我的项目目录具有该版本的 jar,并且它使用 java 1.4。对于 java 1.5,我们假设使用 ServletFileUpload 而不是 FileUpload 。但我想我可以在哪里使用更早版本的 jar 进行工作并不重要。
当我将它与使用 struts 1.1 的实际应用程序一起使用时,问题就来了。一切似乎都很好,但我在解析请求时不返回项目。
items = upload.parseRequest(request);
这里的项目是空的。
所以我能发现的不同之处在于,成功显示结果的 POC 项目是一个 JSP/Servlet 项目,其中真正的应用程序正在使用 Struts。
在这种情况下,JSP/Servlet 和 Struts 项目中的请求会有所不同吗?
在这两种情况下,我都会在下面的表格中使用。
<form action="SampleWeb" method="post" enctype="multipart/form-data">
<input type="file" name="datafile" size="40">
<input type="submit" value="Submit">
下面是struts应用程序中唯一的添加,
<action
path="/ReportsAction"
type="come.test.ReportsAction"
name="ReportsForm"
scope="request"
validate="false"
parameter="dispatch">
<forward name="success" path="/reports/A.jsp"/>
<forward name="updatesuccess" path="/common/B.jsp"/>
</action>