zoukankan      html  css  js  c++  java
  • struts2上传图片的全过程


    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=u4E0Au4F20u7C7Bu578Bu9519u8BEF

    #上传文件太大的提示信息
    struts.messages.error.file.too.large=u4E0Au4F20u6587u4EF6u592Au5927

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



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




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

  • 相关阅读:
    python 20 规范化目录
    python 19 包、logging模块
    python 17 Json、os、sys、hashlib等内置模块
    python 16 time、datetime、random模块
    python 15 带参装饰器
    python 14 装饰器
    [LeetCode]36. Compare Version Numbers版本号比较
    [LeetCode]35. Valid Parentheses有效括号
    [LeetCode]34. Add Binary二进制相加
    [LeetCode]33. Longest Palindromic Substring最长回文子串
  • 原文地址:https://www.cnblogs.com/huangyibo/p/3826312.html
Copyright © 2011-2022 走看看