我尝试读取通过浏览上传的文件。为此我使用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>
答案 0 :(得分:1)
请求是请求。
但是,如果你使用Struts 1,实际上使用 Struts 1。
表单,Java端
使用ActionForm
FormFile
属性:
public class YourForm extends ActionForm {
private FormFile file; // Plus public getter/setter
// Etc.
}
您还可以执行验证内容类型的操作:
public ActionErrors validate(ActionMapping mapping, HttpServletRequest request) {
if (!"text/plain".equals(getFile().getContentType())) {
// etc.
表单,JSP端
<html:form action="/uploadAction" method="post" enctype="multipart/form-data">
<html:file property="file" />
<!-- Etc... -->
行动
在操作中,您应该将文件复制到其最终目的地(外部 webapp;使用配置参数来定义文件的最终位置)。考虑使用实用程序库来执行复制(或移动,可能有几个选项),而不是执行操作中的所有工作,如某些教程中所示。
http://www.mkyong.com/struts/struts-file-upload-example/
不要盲目地在不同环境中使用相同的技术:为你处理这项工作。
另外,避免将Struts 1用于新项目。它比使用Struts 2或Spring MVC等更现代的选项(相比Rails,Grails,Play等更难以使用)更老,更难以使用。