struts2上传图片的过程

1、写一个上传的jsp页面upload_image.jsp,内容如下:
<body>
<center>
  
 <font color="red"><s:fielderror/></font>
  
     <s:form action="uploadOne" method="post"
enctype="multipart/form-data">
      
     <s:file name="file"
label="文件1"></s:file>
      
     <s:file name="file"
label="文件2"></s:file>
      
     <s:file name="file"
label="文件3"></s:file>
      
     <s:file name="file"
label="文件4"></s:file>
      
     <s:submit label="上传"/>
  
     </s:form>  
 
</center>
</body>

解析:A、
form里面的method必须是post,enctype="multipart/form-data"上传文件必须这样写
     
B、<s:fielderror/>这个是图片格式或者大小出错的错误提示---要在struts.xml里面先配置
     
C、name="file",批量上传name的值要一样

2、创建一个action--我的包是com.upload.one
public
class UploadImageAction extends ActionSupport{
    private
List<File> file;
    private List<String>
fileFileName;
    private List<String>
fileContentType;
    
    public String
execute() throws IOException{
  
 //得到工程保存图片的路径
        String root =
ServletActionContext.getRequest().getRealPath("/upload");
      
 
       
//循环上传的文件
        for(int i = 0 ; i <
file.size() ; i
++){
           
InputStream is = new
FileInputStream(file.get(i));
          
 
           
//得到图片保存的位置(根据root来得到图片保存的路径在tomcat下的该工程里)
           
File destFile = new
File(root,this.getFileFileName().get(i));
            
           
//把图片写入到上面设置的路径里
           
OutputStream os = new
FileOutputStream(destFile);
           
byte[] buffer = new
byte[400];
           
int length  = 0
;
           
while((length =
is.read(buffer))>0){
               
os.write(buffer, 0,
length);
           
}
           
is.close();
           
os.close();
       
}
        return
SUCCESS;
   
}
}

解析:在这个action里面做了几个测试
    
要在WebRoot下面新建一个文件夹--upload
  
 A、一个一个的打印,明白每个变量到底是干嘛的,到底得到些什么值
  
 B、我图片存放的路径改到了自己想要的路径下面,结果在页面显示的时候,决绝路径无法显示
  
    可能在显示的时候哪里写错了
       
C、刚开始以后要把得到的图片的名称一个一个得手动添加到fileFileName,结果用
      
fileFileName.add(图片名称)后,fileFileName的length比添加之前多了一倍
          
于是明白,在命名的时候要遵循一个规律,这个样的话fileFileName自动的把图片名称
      
一个一个的添加到里面,不用自己添加

3、配置struts.xml文件
<struts>
  
 <!-- 指定国际化资源文件的baseName为messageResource -->
    
<constant name="struts.custom.i18n.resources"
value="messageResource"/>
    
  
 <!-- 设置该应用使用的解码集 -->
     <constant
name="struts.i18n.encoding" value="utf-8"/>
 
   
 <!-- 上传的全部图片的最大限制-->
     <constant
name="struts.multipart.maxSize" value="1024102400"/>
   
 
    <!-- 配置action->
  
 <package name="default" extends="struts-default">
  
     <action name="uploadOne"
class="com.upload.one.UploadImageAction" >
      
 
            <!--
限制图片的格式和图片的大小 -->
          
 <interceptor-ref name="fileUpload">
  
             <param
name="allowedTypes">
          
       
 image/bmp,image/png,image/gif,image/jpeg,image/jpg
  
           
 </param>
          
     <param
name="maximumSize">102400</param>
      
     </interceptor-ref>
  
         
      
     <!-- 默认的拦截器,必须要写 -->
  
         <interceptor-ref
name="defaultStack" />
          
 
            <result
name="success">/showImage.jsp</result>
  
         <result
name="input">/upload_image.jsp</result>
  
     </action>
  
 </package>

<constant
name="struts.multipart.saveDir"
value="d:/test"></constant>
</struts>

解析:
  
 A、因为在这里我限制了图片的格式和大小,如果不配置国际化资源文件,那么在页面引入<s:fielderror/>
  
    的时候,显示出的内容不友好,于是自己定义出错显示的内容

B、在action配置里面,限制了单张图片的大小<param
name="maximumSize">102400</param>
      
如果不再package外面(<constant name="struts.multipart.maxSize"
value="1024102400"/>)限制总的上传大小
       
    那么,当你上传的单个图片超过限定的大小,没事反应,但是后台会报错

C、<constant name="struts.multipart.saveDir"
value="d:/test"></constant>临时存放文件的路径
      
如果不要这个路径,就会在控制台打印Unable to find 'struts.multipart.saveDir' property setting.
Defaulting to       
javax.servlet.context.tempdir

4、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

解析:当图片的格式不对,上传大小不对时,就会在页面显示相应的错误信息

5、把上传的图片显示出来
 <body>
  
   <s:iterator value="fileFileName"
status="length">
            
 <img src='upload/<s:property
value="fileFileName.get(#length.index)"/>'>
     
</s:iterator>
  </body>

总结:
1、错误时要一边上网查,也要自己看,比如同一个错误,网上解决的办法很多,并不是每个都适合自己
     
还要花时间去试。要有耐心--我差点就没有耐心  
    
  
 2、把出错记录下来,方便以后查看

struts2上传图片的全过程的更多相关文章

  1. struts2上传图片超过大小给出错误提示

    struts2上传图片超过大小给出错误提示        今天碰到上传图片太大,上传不上去返回input视图的界面,回显的错误信息却是乱码,整了好久才整出来,在这里做个记录,方便自己以后查阅,也希望能 ...

  2. struts2——上传图片格式

    <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding= ...

  3. struts2上传图片

    在WEB-INF下新建一个content目录,建立一个upload.jsp <%@ page contentType="text/html; charset=UTF-8" l ...

  4. 关于struts2上传图片临时文件

  5. Struts2上传图片时报404错误

    可能是struts配置文件中定义的拦截器导致的,后缀拦截导致,将该拦截器去掉,在action类里判断后缀 public String upload()throws Exception{ ActionC ...

  6. 一个简单的struts2上传图片的例子

    https://www.cnblogs.com/yeqrblog/p/4398914.html 在我的大创项目中有对应的应用

  7. Struts2运行机制(MVC)的分析:

    C:(controller)控制器          M:(model)模型处理    V:(view)视图 Struts 2 的运行过程:     核心控制器是FilterDispatcher会过滤 ...

  8. struts2多图片上传实例【转】

    原文地址:http://blog.csdn.net/java_cxrs/article/details/6004144 描述: 通过struts2实现多图片上传. 我使用的版本是2.2.1,使用的包有 ...

  9. ueditor1.3.6jsp版在struts2应用中上传图片报"未找到上传文件"解决方案

    摘要: ueditor1.3.6jsp版在struts2应用中上传图片报"未找到上传文件"解决方案 在struts2应用中使用ueditor富文本编辑器上传图片或者附件时,即使配置 ...

随机推荐

  1. MySQL数据类型 int(M) 表示什么意思?详解mysql int类型的长度值问题

    MySQL 数据类型中的 integer types 有点奇怪.你可能会见到诸如:int(3).int(4).int(8) 之类的 int 数据类型.刚接触 MySQL 的时候,我还以为 int(3) ...

  2. Swift3.0P1 语法指南——闭包

    原档:https://developer.apple.com/library/prerelease/ios/documentation/Swift/Conceptual/Swift_Programmi ...

  3. Class.forName的使用

    Class.forName的使用 Class.forName返回一个类,使用此方法可以获取类 首先,创建一个Student类 /*** * This Class is for Student bean ...

  4. google 在线代理浏览

    谷歌访问不了,你又N多方法,比如搭建VPN,买VPN,或查找google多个IP访问, 或通过第三方反代理网站访问, 或通过客户端代理(类似goagent)等 下面罗列出可以访问google的几个代理 ...

  5. Jetty使用教程(四:24-27)—Jetty开发指南

    二十四.处理器(Handler ) 24.1 编写一个常用的Handler Jetty的Handler组件用来处理接收到的请求. 很多使用者不需要编写Jetty的Handler ,而是通过使用Serv ...

  6. LeetCode: Largest Rectangle in Histogram(直方图最大面积)

    http://blog.csdn.net/abcbc/article/details/8943485 具体的题目描述为: Given n non-negative integers represent ...

  7. Java基础知识点2:hashCode()方法

    hashCode()方法基本实现 hashCode方法是Java的Object类所定义的几个基本方法之一.我们可以深入到Object类的源码中去查看: public native int hashCo ...

  8. react native中对props和state的理解

    最近使用react native这个新的技术做完一个项目,所以赶紧写个博客巩固一下. 今天我想说的是props和state,当然这是我个人的理解,如果有什么不对的地方,望指正. 首先我先说说props ...

  9. CSS3动画里的过渡效果

    过渡效果中有: 1平滑效果 2线性过渡 3由慢到快 4由快到慢 5慢-快-慢  等等 具体参考 w3chool 例如: <body> <div class="out&quo ...

  10. 【转】XAMPP中配置多个网站

    XAMPP虚拟主机配置,多域名绑定访问本地站点 XAMPP有时候你需要一些顶级域名访问方式来访问你本地的项目也就是虚拟主机配置,这时候就需要配置虚拟主机,给你的目录绑定一个域名,实现多域名绑定访问. ...