我尝试读取通过浏览上传的文件。为此,我使用apache commons fileupload jar。因此,在使用项目应用程序运行之前,我只需执行一个成功读取文件的servlet/jsp POC项目。下面是代码,阅读使用Struts上传的文件
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的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">
下面是在支柱应用的唯一此外,
<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>
是否正确地将文件发送到服务器(在浏览器的开发者工具中查看发布请求)? – Uooo 2013-02-14 10:28:37
是这两个请求都是相同的。它将文件内容作为发布参数发送。内容处理:表单数据; NAME = “数据文件”; filename =“sample.txt” Content-Type:text/plain 564447000,563000240,563178000,563143000 – Harshana 2013-02-17 16:00:26