struts2上传图片的全过程

来源:互联网 发布:unix网络编程卷3 pdf 编辑:程序博客网 时间:2024/06/06 05:00

转载
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、把出错记录下来,方便以后查看

    如果有哪里不对,或其他错误,还请你们指出!!!
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 辞职出国留学后社保怎么办 高三数学40来分怎么办 论文查重表格内容重复怎么办 榕树叶子掉光了怎么办 2017江苏高考2c怎么办 高考刚过三本线怎么办 江苏高考选修有d怎么办 西安地铁卡丢了怎么办 酒后头痛怎么办快速缓解疼痛 孕妇感冒头痛怎么办快速缓解疼痛 投稿后发现文章有错误怎么办 如有一方不同意离婚怎么办 孩子上课时注意力不集中怎么办 幼儿上课时注意力不集中怎么办 孩子读初中不爱读书怎么办 老师需要刺激孩子家长怎么办 错觉视界第11关怎么办 爱逃学的学生老师怎么办 论文投稿发现有错误怎么办 孩子上初中数学物理不好怎么办 火山小视频误踢怎么办 铁棍山药弄到手很痒怎么办 山药皮过敏很痒怎么办 貔貅被家人摸了怎么办? 摸了山药很痒怎么办 山药搞得皮肤痒怎么办 手上弄了山药痒怎么办 老板就是个富二代怎么办 中考准考证密码忘了怎么办 准考证号和密码忘了怎么办 安运继续教育考试不及格怎么办 微信的视频打不开怎么办 公众号被取消了怎么办 合同上不写工资怎么办 已经上班了想考个大专文凭怎么办 微信小程序违规暂停服务怎么办 程序锁密码忘了怎么办 忘了应用锁密码怎么办 毕业后发现论文有错误怎么办 柯丽尔打胶片时胶片卡住了怎么办 闽教英语要收费怎么办