Java 读取用Struts上传的文件
我试图阅读通过浏览上传的文件。为此,我使用ApacheCommonsFileUpload jar。因此,在使用项目应用程序运行它之前,我只需执行一个成功读取文件的servlet/jsp POC项目。下面是代码Java 读取用Struts上传的文件,java,jsp,servlets,struts,Java,Jsp,Servlets,Struts,我试图阅读通过浏览上传的文件。为此,我使用ApacheCommonsFileUpload jar。因此,在使用项目应用程序运行它之前,我只需执行一个成功读取文件的servlet/jsp POC项目。下面是代码 protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { boole
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版本,并且它使用Java1.4。在Java1.5中,我们假设使用ServletFileUpload而不是FileUpload。但我想,我在哪里可以使用早期版本的jar进行工作并不重要
当我将它用于使用struts 1.1的实际应用程序时,问题就出现了。一切似乎都很好,但我在解析请求时不返回项目
items=upload.parseRequest(请求)
项目在此为空。
因此,我可以发现的区别是,成功显示结果的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>
请求就是请求 但是,如果您使用的是Struts 1,那么实际上应该使用Struts 1 表单,Java端 将
ActionForm
与FormFile
属性一起使用:
public类YourForm扩展了ActionForm{
private FormFile file;//加上公共getter/setter
//等等。
}
您还可以执行验证内容类型之类的操作:
公共ActionErrors验证(ActionMapping映射,HttpServletRequest){
如果(!“text/plain”.equals(getFile().getContentType())){
//等等。
表单,JSP端
行动
在动作中,你应该把你的文件复制到它的最终目的地(在WebApp外面,使用一个配置参数来定义文件在哪里结束)。考虑使用一个实用程序库来做拷贝(或者移动,也许有几个选项),而不是像在一些教程中所示的那样在动作中做所有的工作。
不要盲目地在不同的环境中使用相同的技术:这项工作是为您处理的另外,避免在新项目中使用Struts 1。它非常旧,比Struts 2或Spring MVC等更现代的选项更难使用(后者比Rails、Grails、Play等更难使用)文件是否正确发送到服务器(在浏览器的开发工具中查看post请求)?是,两个请求完全相同。它将文件内容作为post参数发送。内容配置:表单数据;name=“datafile”;filename=“sample.txt”内容类型:text/plain 56444700056300024020563178000563143000I能够使用struts文件属性读取文件。但是奇怪的是,为什么正常的请求解析无法工作。即使我提到了post请求在这两个属性中也是相同的projects@Harshana因为多部分请求是不同的,您需要以不同的方式解析它们,而不是从请求中获取参数。例如,使用Apache Commons FileUpload.yes是我的示例使用它。然后upload.parseRequest(请求);使用正确的post请求和文件内容作为参数返回null(我检查请求)@Harshana如果您使用的是Struts,则不需要手动执行此操作,而且Struts已经解析了请求,这意味着它可能无法再次解析(也不需要解析)。我不明白你现在在做什么。不,我尝试了两种不同的方法。1.使用apache commons fileupload jar,如上面的示例所示,其中我没有像下面那样设置form属性。2.使用struts,通过设置form属性并在=new BufferedReader(new InputStreamReader)中将文件内容作为BufferedReader访问(((FormFile)actionForm.get(“strUploadFile”).getInputStream());