struts 2 Commons FileUpload文件上传

本文详细介绍了使用Struts2框架进行文件上传的基本流程,包括如何在Action类中定义上传文件的相关变量、设置文件保存路径、读取上传文件的输入流,并进行文件的保存。同时,阐述了在struts.xml中配置文件上传拦截器的方法,以及客户端表单的正确填写方式,确保文件上传功能的实现。此外,还强调了表单方法需设置为POST并使用multipart/form-data的编码类型,以支持文件上传。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.首先在action中写如下代码

[java]  view plain copy
  1. /* 
  2.      * fileupload,fileuploadFileName,fileuploadContentType命名规则,否则无法取值 
  3.      * fileupload为客户端input上传组件的name,fileuploadFileName文件名称是fileupload+FileName组成,必须这样 
  4.      * fileuploadContentType 文件类型是fileupload+ContentType组成,必须这样写 
  5.      */  
  6.     private File fileupload;//上传的文件  
  7.     private String fileuploadFileName;//文件的名称  如上传的文件是a.png 则fileuploadFileName值为"a.png"  
  8.     private String fileuploadContentType;//文件的类型  如上传的是png格式的图片,则fileuploadContentType值为"image/png"  
  9.     /* 
  10.      * 指定上传文件在服务器上的保存目录,需要在Action中为定义savePath变量并为其添加相应的setter和getter方法 
  11.      * 便于Struts2将struts.xml中的<param name="savePath">uploads/</param>值赋给savePath属性 
  12.      */  
  13.     private String savePath;//文件的保存位置  
  14.       
  15.     public String uploadFile() throws Exception {  
  16.         String absolutePath = ServletActionContext.getServletContext().getRealPath(""); // 获取项目根路径  
  17.         //文件路径  
  18.         String path = absolutePath + "/" + this.savePath + "/";  
  19.         //创建路径,如果目录不存在,则创建  
  20.         File file = new File(path);  
  21.         if(!file.exists()) {  
  22.             file.mkdirs();  
  23.         }  
  24.         //文件路径+文件名  
  25.         path +=this.getFileuploadFileName();  
  26.         //1.构建输入流    
  27.         FileInputStream fis = new FileInputStream(fileupload);  
  28.         //2.构建输出流    
  29.         FileOutputStream fos = new FileOutputStream(path);  
  30.         //3.通过字节写入输出流    
  31.         try {  
  32.             byte[] buf = new byte[1024];  
  33.             int len = 0;  
  34.             while ((len = fis.read(buf)) > 0) {  
  35.                 fos.write(buf, 0, len);  
  36.             }  
  37.         } catch (Exception e) {  
  38.             e.printStackTrace();  
  39.         } finally {  
  40.             fis.close();  
  41.             fos.close();  
  42.         }  
  43.         return SUCCESS;    
  44.     }  
  45.     @JSON(serialize = false)  
  46.     public File getFileupload() {  
  47.         return fileupload;  
  48.     }  
  49.     public void setFileupload(File fileupload) {  
  50.         this.fileupload = fileupload;  
  51.     }  
  52.     @JSON(serialize = false)  
  53.     public String getSavePath() {  
  54.         return savePath;  
  55.     }  
  56.     public void setSavePath(String savePath) {  
  57.         this.savePath = savePath;  
  58.     }  
  59.     public String getFileuploadFileName() {  
  60.         return fileuploadFileName;  
  61.     }  
  62.     public void setFileuploadFileName(String fileuploadFileName) {  
  63.         this.fileuploadFileName = fileuploadFileName;  
  64.     }  
  65.     public String getFileuploadContentType() {  
  66.         return fileuploadContentType;  
  67.     }  
  68.     public void setFileuploadContentType(String fileuploadContentType) {  
  69.         this.fileuploadContentType = fileuploadContentType;  
  70.     }  
 

2.在struts.xml中写入:

[xhtml]  view plain copy
  1. <action name="uploadFile" class="authResourcesAction" method="uploadFile">  
  2.             <!-- 配置 fileupload 的拦截器 -->  
  3.             <interceptor-ref name="fileUpload">  
  4.                 <!-- 可以支持上传的文件类型 -->  
  5.                 <param name="allowedTypes">  
  6.                     image/bmp,image/png,image/gif,image/jpeg,image/jpg  
  7.                 </param>  
  8.                 <!-- 设置上传文件的大小不能超过1M -->  
  9.                 <param name="maximumSize">1024*1024</param>  
  10.             </interceptor-ref>  
  11.             <!-- 必须配置系统默认的拦截器 -->  
  12.             <interceptor-ref name="defaultStack" />  
  13.             <!-- 设置上传文件的默认保存路径 -->  
  14.             <param name="savePath">uploads</param>  
  15.             <result name="input">/customer/addNew.jsp</result>  
  16.             <result name="success" type="redirect">/userMgr/userInfo.jsp</result>  
  17.         </action>  
 

3.客户端jsp页面中:

[xhtml]  view plain copy
  1. <s:form action ="uploadFile" method ="POST" enctype ="multipart/form-data">   
  2.         <s:file name ="fileupload"/>   
  3.         <s:submit value="上传" label="upload"/>   
  4.     </s:form>  
 

*注意:form表单一定要是:method ="POST" enctype ="multipart/form-data"

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值