`
newleague
  • 浏览: 1492652 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类

struts2多图片上传实例

 
阅读更多

描述:

         通过struts2实现多图片上传。

         我使用的版本是2.2.1,使用的包有如下几个:

                  

 

 

  1. <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>  
  2.   
  3. <%@ taglib prefix="s" uri="/struts-tags" %>  
  4.   
  5. <%  
  6.   
  7. String path = request.getContextPath();  
  8.   
  9. String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";  
  10.   
  11. %>  
  12.   
  13.    
  14.   
  15. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">  
  16.   
  17. <html>  
  18.   
  19.   <head>  
  20.   
  21.     <base href="<%=basePath%>">  
  22.   
  23.       
  24.   
  25.     <title>My JSP 'fileUpLoad.jsp' starting page</title>  
  26.   
  27.       
  28.   
  29.      <meta http-equiv="pragma" content="no-cache">  
  30.   
  31.      <meta http-equiv="cache-control" content="no-cache">  
  32.   
  33.      <meta http-equiv="expires" content="0">      
  34.   
  35.      <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">  
  36.   
  37.      <meta http-equiv="description" content="This is my page">  
  38.   
  39.      <!--  
  40.   
  41.      <link rel="stylesheet" type="text/css" href="styles.css" mce_href="styles.css">  
  42.   
  43.      -->  
  44.   
  45.    
  46.   
  47.   </head>  
  48.   
  49.     
  50.   
  51.   <body>  
  52.   
  53.              <center>  
  54.   
  55.                   <s:form action ="fileUpload" method ="POST" enctype ="multipart/form-data" >  
  56.   
  57.                   <s:fielderror />  
  58.   
  59.                   <s:file name ="myFile" label ="Image File1"/>  
  60.   
  61.                   <s:file name ="myFile" label ="Image File2"/>  
  62.   
  63.                   <s:file name ="myFile" label ="Image File3"/>  
  64.   
  65.                   <s:textfield name ="caption" label ="Caption" />  
  66.   
  67. <s:submit/>  
  68.   
  69.                     </s:form>    
  70.   
  71.               </center>  
  72.   
  73.   </body>  
  74.   
  75. </html>  
  76.   
  77.    

 

 

 

         FileUpload.jsp中,先将表单的提交方式设为POST,然后将enctype设为multipart/form-data,这并没有什么特别之处。接下来,<s:file/>标志将文件上传控件绑定到ActionmyFile属性,因为要上传多张图片我们就暂且添加三个file

 

注意这三个filename属性要相同。

 

2.    创建处理图片上传的action

FileUploadAction.java

 

  1. package com.ywjava.action;  
  2.   
  3. import java.io.BufferedInputStream;  
  4. import java.io.BufferedOutputStream;  
  5. import java.io.File;  
  6. import java.io.FileInputStream;  
  7. import java.io.FileOutputStream;  
  8. import java.io.InputStream;  
  9. import java.io.OutputStream;  
  10. import java.util.ArrayList;  
  11. import java.util.Date;  
  12. import java.util.List;  
  13.   
  14. import org.apache.struts2.ServletActionContext;  
  15.   
  16. import com.opensymphony.xwork2.ActionSupport;  
  17.   
  18. public class FileUploadAction extends ActionSupport {  
  19.     private static final long serialVersionUID = 572146812454l;  
  20.     private static final int BUFFER_SIZE = 16 * 1024;  
  21.     private List<File> myFile = new ArrayList<File>();    
  22.     private List<String> contentType = new ArrayList<String>();  
  23.     private List<String> fileName = new ArrayList<String>();    //文件名   
  24.     private List<String> imageFileName = new ArrayList<String>();  
  25.     private String caption;  
  26.   
  27.     private static void copy(File src, File dst) {  
  28.         try {  
  29.             InputStream in = null;  
  30.             OutputStream out = null;  
  31.             try {  
  32.                 in = new BufferedInputStream(new FileInputStream(src),  
  33.                         BUFFER_SIZE);  
  34.                 out = new BufferedOutputStream(new FileOutputStream(dst),  
  35.                         BUFFER_SIZE);  
  36.                 byte[] buffer = new byte[BUFFER_SIZE];  
  37.                 while (in.read(buffer) > 0) {  
  38.                     out.write(buffer);  
  39.                 }  
  40.             } finally {  
  41.                 if (null != in) {  
  42.                     in.close();  
  43.                 }  
  44.                 if (null != out) {  
  45.                     out.close();  
  46.                 }  
  47.             }  
  48.         } catch (Exception e) {  
  49.             e.printStackTrace();  
  50.         }  
  51.     }  
  52.       
  53.     private static String getExtention(String fileName) {  
  54.         int pos = fileName.lastIndexOf(".");  
  55.         return fileName.substring(pos);  
  56.     }  
  57.   
  58.     @Override  
  59.     public String execute() {  
  60.         if (myFile == null)  
  61.             return INPUT;  
  62.         for (int i = 0; i < myFile.size(); i++) {  
  63.             imageFileName.add(new Date().getTime()+ getExtention(this.getMyFileFileName().get(i))) ;  
  64.             File imageFile = new File(ServletActionContext.getServletContext()  //得到图片保存的位置(根据root来得到图片保存的路径在tomcat下的该工程里)   
  65.       
  66.                     .getRealPath("UploadImages")     
  67.                     + "/" + imageFileName);   
  68.             copy(myFile.get(i), imageFile);  //把图片写入到上面设置的路径里   
  69.   
  70.         }  
  71.         return SUCCESS;  
  72.     }  
  73.   
  74.   
  75.     public List<File> getMyFile() {  
  76.         return myFile;  
  77.     }  
  78.   
  79.     public void setMyFile(List<File> myFile) {  
  80.         this.myFile = myFile;  
  81.     }  
  82.   
  83.     public List<String> getContentType() {  
  84.         return contentType;  
  85.     }  
  86.   
  87.     public void setContentType(List<String> contentType) {  
  88.         this.contentType = contentType;  
  89.     }  
  90.   
  91.   
  92.     public List<String> getMyFileFileName() {  
  93.         return fileName;  
  94.     }  
  95.   
  96.     public void setMyFileFileName(List<String> fileName) {  
  97.         this.fileName = fileName;  
  98.     }  
  99.   
  100.   
  101.     public List<String> getImageFileName() {  
  102.         return imageFileName;  
  103.     }  
  104.   
  105.     public void setImageFileName(List<String> imageFileName) {  
  106.         this.imageFileName = imageFileName;  
  107.     }  
  108.   
  109.     public String getCaption() {  
  110.         return caption;  
  111.     }  
  112.   
  113.     public void setCaption(String caption) {  
  114.         this.caption = caption;  
  115.     }  
  116.   
  117.     public static int getBufferSize() {  
  118.         return BUFFER_SIZE;  
  119.     }  
  120.   
  121. }  

 

 

 

FileUploadAction中我分别写了setMyFileContentTypesetMyFileFileNamesetMyFilesetCaption四个Setter方法,

后两者很容易明白,分别对应FileUpload.jsp中的<s:file/><s:textfield/>标志。但是前两者并没有显式地与任何的页面标志绑定,

那么它们的值又是从何而来的呢?其实,<s:file/>标志不仅仅是绑定到myFile

还有myFileContentType(上传文件的MIME类型)和myFileFileName(上传文件的文件名,该文件名不包括文件的路径)。

因此,<s:file name="xxx" />对应Action类里面的xxxxxxContentTypexxxFileName三个属性。

 

 

        FileUploadAction作用是将浏览器上传的文件拷贝到WEB应用程序的

     UploadImages文件夹下,新文件的名称是由系统时间与上传文件的后缀组成,

     该名称将被赋给imageFileName属性,以便上传成功的跳转页面使用。

      

 

3.    创建显示图片的页面

       showUpload.jsp

  1. <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>                                         
  2.     <%@ taglib prefix="s" uri="/struts-tags" %>                                                              
  3.     <%                                                                                                       
  4.     String path = request.getContextPath();                                                                  
  5. String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";    
  6.     %>                                                                                                         
  7.                                                                                                              
  8.     <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">                                          
  9.     <html>                                                                                                   
  10.       <head>                                                                                                 
  11.         <base href="<%=basePath%>">                                                                          
  12.                                                                                                                
  13.         <title>Show Image</title>                                                                              
  14.                                                                                                                
  15.         <meta http-equiv="pragma" content="no-cache">                                                            
  16.         <meta http-equiv="cache-control" content="no-cache">                                                     
  17.         <meta http-equiv="expires" content="0">                                                                  
  18.         <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">                                        
  19.         <meta http-equiv="description" content="This is my page">                                                
  20.         <!--                                                                                                     
  21.         <link rel="stylesheet" type="text/css" href="styles.css" mce_href="styles.css">                                                
  22.         -->                                                                                                      
  23.                                                                                                                
  24.       </head>                                                                                                  
  25.                                                                                                                
  26.       <body>                                                                                                   
  27.       <s:iterator value="imageFileName" status="length">                                                       
  28.                                                                                                                
  29.             <div                                                                                                   
  30.                 style="padding: 3px; border: solid 1px #cccccc; text-align: center">                                 
  31.                 <img src='UploadImages/<s:property value ="imageFileName" /> ' />                                    
  32.                 <br />                                                                                               
  33.                 <s:property value="caption" />                                                                       
  34.             </div>                                                                                                 
  35.             </s:iterator>                                                                                          
  36.             <s:property value ="caption" />                                                                        
  37.                                                                                                                    
  38.         </body>                                                                                                  
  39.     </html>                                                                                                    

 

 

 

4.Action配置文件

    Struts.xml  

 

 

  1. <?xml version="1.0" encoding="UTF-8" ?>  
  2. <!DOCTYPE struts PUBLIC  
  3.     "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"  
  4.     "http://struts.apache.org/dtds/struts-2.0.dtd">  
  5.   
  6. <struts>  
  7.   
  8.     <constant name="struts.enable.DynamicMethodInvocation" value="false" />  
  9.     <constant name="struts.devMode" value="false" />  
  10.   
  11.     <!-- 指定国际化资源文件的baseName为messageResource -->  
  12.     <constant name="struts.custom.i18n.resources" value="messageResource" />  
  13.   
  14.     <!-- 设置该应用使用的解码集 -->  
  15.     <constant name="struts.i18n.encoding" value="utf-8" />  
  16.   
  17.     <!-- 上传的全部图片的最大限制-->  
  18.     <constant name="struts.multipart.maxSize" value="1024102400" />  
  19.       
  20.     <!-- 临时存放文件的路径 -->  
  21.     <constant name="struts.multipart.saveDir" value="d:/test" />  
  22.       
  23.     <package name="index" namespace="/" extends="struts-default">  
  24.   
  25.         <action name="index" class="com.ywjava.action.IndexAction">  
  26.             <result>  
  27.                 /WEB-INF/page/fileUpLoad.jsp  
  28.             </result>  
  29.         </action>  
  30.   
  31.   
  32.   
  33.         <action name="fileUpload" class="com.ywjava.action.FileUploadAction">  
  34.             <!-- 限制图片的格式和图片的大小 -->  
  35.             <interceptor-ref name="fileUpload">  
  36.                 <param name="allowedTypes">  
  37.                   image/bmp,image/png,image/gif,image/jpeg,image/pjpeg  
  38.                 </param>  
  39.             </interceptor-ref>  
  40.             <!-- 默认的拦截器,必须要写 -->  
  41.             <interceptor-ref name="defaultStack" />  
  42.              <result name="input"> /WEB-INF/page/fileUpLoad.jsp</result>  
  43.             <result name="success">/WEB-INF/page/showUpload.jsp</result>  
  44.   
  45.         </action>  
  46.     </package>  
  47.     <!--  
  48.         <constant name="struts.multipart.saveDir" value="d:/test"></constant>  
  49.     -->  
  50.   
  51.     <!-- Add packages here -->  
  52.   
  53. </struts>  

 

 

Action配置文件里所做的配置都有注释,不明白的地方看下注释

另外因为做了国际化处理所以需要一个国际化配置的文件

放在src目录下

 

 

 

 

 

 

 

5.国际化配置文件

                        

messageResource_zh_CN.properties(只配置了中文的)

  

struts.messages.error.content.type.not.allowed=/u4E0A/u4F20/u7C7B/u578B/u9519/u8BEF

struts.messages.error.file.too.large=/u4E0A/u4F20/u6587/u4EF6/u592A/u5927

 

总结:struts2上传图片利用了fileUpload拦截器而变的简单,主要是在action中做相应处理获取文件的相应信息。

                         

 

        具体实现:

      1.       创建上传图片的页面

fileUpload.jsp

 

分享到:
评论

相关推荐

    struts+spring上传图片实例

    1. **图片上传流程**:首先,用户通过Web界面选择本地的图片文件并提交。接着,Struts2的Action类接收到请求,处理文件上传的数据。 2. **Struts2文件上传支持**:Struts2提供了FileUpload interceptor,它可以处理...

    struts2上传下载实例

    这个"struts2_上传下载"实例可能还包括了错误处理、多文件上传、限制上传大小、文件类型检查等更复杂的情况。通过这些示例,开发者可以学习如何在实际项目中安全、高效地实现文件上传和下载功能。

    struts2文件上传实例

    1. **.struts2配置**:在Struts2框架中,需要在`struts.xml`配置文件中添加相应的action配置,声明文件上传的处理方法。通常,你需要设置`&lt;result&gt;`类型为`stream`,以便处理上传的文件。 2. **Action类**:创建一...

    Struts2上传图片并生成等比例缩略图的实例

    本实例将向你展示如何利用Struts2的FileUpload拦截器处理图片上传,并通过Java图像处理库如Java AWT或Apache Commons Imaging(原ImageIO)来创建缩略图。 首先,我们需要在Struts2的配置文件`struts.xml`中添加`...

    图片上传成功实例java+struts1

    在图片上传实例中,Struts1主要负责接收前端发送的文件数据,进行业务逻辑处理,然后将处理结果返回给前端。 3. **Java 后端处理**: 在Java后端,我们需要创建一个Action类来处理上传请求。该Action类通常会包含...

    struts2上传实例

    在Struts2中,实现文件上传功能是一项常见的需求,例如用户可能需要上传图片、文档或其他类型的文件。本实例主要关注如何在Struts2框架下进行文件上传。 首先,我们需要在Struts2配置文件(通常为struts.xml)中...

    struts2图片和文件上传

    标题与描述概述的知识点主要集中在Struts2框架中的文件与图片上传功能,下面将详细解析这一过程的关键步骤和实现机制。 ### Struts2文件与图片上传详解 #### 准备工作 - **导入必要的库**:为了实现文件上传功能,...

    struts实现任意多文件上传实例

    总的来说,"struts实现任意多文件上传实例"是一个实用的示例,可以帮助开发者了解和掌握在Struts中进行多文件上传的完整流程。通过学习这个实例,你可以更深入地理解Struts框架和文件上传的处理方式。

    ssh框架用struts2+hibernate实现图片的上传源码

    在图片上传的场景下,我们需要创建一个Action类,该类通常会包含一个方法来处理上传请求。这个方法会接收上传文件的参数,并进行合法性校验,如检查文件类型、大小等。Struts2的配置文件(struts.xml)需要配置这个...

    struts1.2上传图片例子

    ### Struts 1.2 图片上传实例解析 #### 一、概述 在Web开发过程中,文件上传是一项常见的功能需求。对于使用Struts框架进行开发的项目而言,掌握如何利用Struts实现文件上传是非常必要的技能之一。本文将通过一个...

    Struts+jsp实现上传实例

    在本实例中,我们将深入探讨如何利用Struts框架和JSP来实现文件上传功能。 Struts是Apache软件基金会的一个开源项目,它提供了一种规范化的MVC设计模式的实现,帮助开发者组织和控制应用程序的业务逻辑。而JSP...

    struts下上传图片到数据库并显示到页面实例

    以上就是一个完整的在Struts框架下实现图片上传到数据库并显示的实例。这个过程涉及到前端表单处理、后端Action处理、数据库操作以及页面展示等多个环节,理解并掌握这些知识对于开发Java Web应用非常有帮助。

    struts2文件上传下载实例

    在Struts2 Action类中,我们需要创建一个`java.io.File`或`org.apache.struts2.util.FileWrapper`类型的属性来接收上传的文件。例如: ```java private File file; private String fileContentType; private ...

    struts2图片上传

    综上所述,"struts2图片上传"是一个关于如何在Struts2框架下实现用户端图片文件上传到服务器的实例。它涵盖了Java、J2EE、上传技术和Struts2框架的核心知识点,是Web开发中的常见操作,对理解和掌握这些技术有重要...

    Ext3.2 + struts 文件上传实例

    在本文中,我们将深入探讨如何使用Ext3.2与Struts框架实现文件上传功能,同时解决中文乱码问题。这两个技术结合在一起,可以为Web应用提供高效、稳定的文件上传解决方案。 首先,Ext3.2是一个JavaScript库,它提供...

    使用UEditor实现富文本编辑图片上传附件上传实例

    1、内含两个文件:①、UEditorDemo.rar ②、UEdtior的简单使用.doc;...5、最后一点是提示:如果要把UEditor使用在struts中,要重写web.xml中所有过滤.jsp或者.*的过滤器,不然上传图片和文件会失败。

    Struts2.0文件上传实例

    Struts2.0文件上传是Java Web开发中的一个重要实践,它允许用户在Web应用程序中上传文件,例如图片、文档或音频文件。这个实例是针对初学者设计的,可以帮助理解并实现这一功能。以下是对Struts2.0文件上传机制及其...

    Java简单上传图片实例

    总结来说,这个Java图片上传实例主要涉及以下知识点: 1. Struts框架的Action配置和执行机制。 2. 使用`File`对象接收上传的文件。 3. 处理文件上传的业务逻辑,包括文件的保存和异常处理。 4. HTML表单的创建,...

    struts2上传图片

    本文详细介绍了如何在Struts2框架中实现简单的图片上传功能。通过导入必要的Jar包、编写工具类以及设计前端上传页面,我们可以方便地实现文件上传的需求。此外,还介绍了文件上传的整个流程及其背后的工作原理,这...

    简单易懂的struts2文件上传

    在Struts2中,文件上传功能是一个常见的需求,例如用户可能需要上传图片、文档或其他类型的文件。本教程将深入浅出地讲解如何在Struts2中实现文件上传,并提供一个简单的实例来帮助理解。 1. **Struts2文件上传概述...

Global site tag (gtag.js) - Google Analytics