java如何保存上传后的文件 (struts2与struts1)

本文介绍了Java中Struts2框架如何实现文件上传。首先,讲解了文件上传的原理,涉及表单enctype属性和multipart/form-data编码方式。接着,详细阐述了Struts2如何利用Apache的Common-FileUpload组件简化文件上传过程,并提供了相关的Action类和配置文件示例。此外,还提到了多文件上传的处理方法和注意事项。
摘要由CSDN通过智能技术生成

1.    文件上传的原理: 
表单元素的enctype属性指定的是表单数据的编码方式,该属性有3个值: 
1)      application/x-www-form-urlencoded:这是默认编码方式,它只处理表单域里的value属性值,采用这种编码方式的表单会将表单域的值处理成URL编码方式。 
2)      multipart/form-data:这种编码方式的表单会以二进制流的方式来处理表单数据,这种编码方式会把文件域指定文件的内容也封装到请求参数里。 
3)      text/plain:这种方式主要适用于直接通过表单发送邮件的方式。 
文件上传是web应用经常用到的一个知识。原理是,通过为表单元素设置enctype="multipart/form-data"属性,让表单提交的数据以二进制编码的方式提交,在接收此请求的Servlet中用二进制流来获取内容,就可以取得上传文件的内容,从而实现文件的上传。 
在Java领域中,有两个常用的文件上传项目:一个是Apache组织Jakarta的Common-FileUpload组件(http://commons.apache.org/fileupload/),另一个是Oreilly组织的COS框架(http://www.servlets.com/cos/)。利用这两个框架都能很方便的实现文件的上传。 
2.    Struts2的文件上传: 
Struts2并未提供自己的请求解析器,也就是就Struts2不会自己去处理multipart/form-data的请求,它需要调用其他请求解析器,将HTTP请求中的表单域解析出来。但Struts2在原有的上传解析器基础上做了进一步封装,更进一步简化了文件上传。 
Struts2默认使用的是Jakarta的Common-FileUpload框架来上传文件,因此,要在web应用中增加两个Jar文件:commons-fileupload-1.2.jar和commons-io-1.3.1.jar。它在原上传框架上做了进一步封装,简化了文件上传的代码实现,取消了不同上传框架上的编程差异。 
如果要改成其它的文件上传框架,可以修改struts.multipart.parser常量的值为cos/pell,默认值是jakata。并在classpath中增加相应上传组件的类库。 
2.1.    步骤一:创建带上传表单域的页面                 

Java代码   收藏代码
  1. <%@ page language="java" contentType="text/html; charset=UTF-8"%>  
  2. <html>  
  3. <head>  
  4.     <title>Struts2 File Upload</title>  
  5. </head>  
  6. <body>  
  7.     <form action="fileUpload.action" method="POST" enctype="multipart/form-data">  
  8.         文件标题:<input type="text" name="title" size="50"/><br/>  
  9.         选择文件:<input type="file" name="upload" size="50"/><br/>  
  10.        <input type="submit" value=" 上传 "/>         
  11.     </form>  
  12. </body>  
  13. </html>  
此页面特殊之处只是把表单的enctype属性设置为multipart/form-data。 
2.2.    步骤二:创建处理上传请求的Action类 
                
Java代码   收藏代码
  1. package org.qiujy.web.struts2;  
  2. import java.io.BufferedInputStream;  
  3. import java.io.BufferedOutputStream;  
  4. import java.io.File;  
  5. import java.io.FileInputStream;  
  6. import java.io.FileOutputStream;  
  7. import java.io.InputStream;  
  8. import java.io.OutputStream;  
  9. import org.apache.struts2.ServletActionContext;  
  10. import com.opensymphony.xwork2.ActionSupport;  
  11. /** 
  12.  *处理文件上传的Action类 
  13.  *@authorqiujy 
  14.  *@version1.0 
  15.  */  
  16. publicclass FileUploadAction extends ActionSupport {  
  17.     privatestaticfinalintBUFFER_SIZE = 16 * 1024;  
  18.     // 文件标题  
  19.     private String title;  
  20.     // 上传文件域对象  
  21.     private File upload;  
  22.     // 上传文件名  
  23.     private String uploadFileName;  
  24.     // 上传文件类型  
  25.     private String uploadContentType;  
  26.     // 保存文件的目录路径(通过依赖注入)  
  27.     private String savePath;  
  28.     //以下省略getter和setter......  
  29.     //自己封装的一个把源文件对象复制成目标文件对象  
  30.     privatestaticvoid copy(File src, File dst) {  
  31.         InputStream in = null;  
  32.         OutputStream out = null;  
  33.         try {  
  34.             in = new BufferedInputStream(new FileInputStream(src), BUFFER_SIZE);  
  35.             out = new BufferedOutputStream(new FileOutputStream(dst),  
  36.                     BUFFER_SIZE);  
  37.             byte[] buffer = newbyte[BUFFER_SIZE];  
  38.             int len = 0;  
  39.             while ((len = in.read(buffer)) > 0) {  
  40.                 out.write(buffer, 0, len);  
  41.             }  
  42.         } catch (Exception e) {  
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值