zoukankan      html  css  js  c++  java
  • Struts2学习8--文件上传(单个文件上传)

    一、依赖

    Struts2利用第三方文件上传框架:(Myeclispse已配置)进行封装,没有jar需自己加上。

    Library                                       URL                                         Struts 2.0.x                   Struts 2.1.x 

    Commons-FileUpload   http://commons.apache.org/fileupload/           1.1.1                                 1.2.1

    Commons-IO              http://commons.apache.org/io/                     1.0                                   1.3.2

    二、单个文件上传

    JSP:

    <s:form action="doUpload" method="post" enctype="multipart/form-data">
        <s:file name="doc" label="File"/>
        <s:submit/>

    注:那个file 的name是自己取的。

    action:

    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileOutputStream;
    import java.io.IOException;
    
    import org.apache.struts2.ServletActionContext;
    
    
    import com.opensymphony.xwork2.ActionSupport;
    
    public class FileUploadAction extends ActionSupport {
    
         private File doc;
         private String docContentType; //文件类型属性
         private String docFileName; //文件名
       
      
    
    
        private String path;
    
    
         public String execute() {
             FileOutputStream fos = null;
             FileInputStream fis = null;
             try {
                 // 建立文件输出流
                 String filename = getFileName(getDocFileName());
                 fos = new FileOutputStream(getPath() + "\" + filename);
                 // 建立文件上传流
                 fis = new FileInputStream(getDoc());
                 byte[] buffer = new byte[1024];
                 int len = 0;
                 while ((len = fis.read(buffer)) > 0) {
                     fos.write(buffer, 0, len);
                 }
             } catch (Exception e) {
                 System.out.println("文件上传失败");
                 e.printStackTrace();
             } finally {
                 close(fos, fis);
             }
             return SUCCESS;
            
        }
            
    
    private void close(FileOutputStream fos, FileInputStream fis) {
        if (fis != null) {
            try {
                fis.close();
            } catch (IOException e) {
                System.out.println("FileInputStream关闭失败");
                e.printStackTrace();
            }
        }
        if (fos != null) {
            try {
                fos.close();
            } catch (IOException e) {
                System.out.println("FileOutputStream关闭失败");
                e.printStackTrace();
            }
        }
    }
    
         //生成一个新的文件名
        private String getFileName(String fileName) {
            int position = fileName.lastIndexOf(".");
            String extension = fileName.substring(position);
            return System.currentTimeMillis()+extension;
        }
    
           public String getDocFileName() {
                return docFileName;
            }
    
    
            public void setDocFileName(String docFileName) {
                this.docFileName = docFileName;
            }
        public String getPath() {
            return ServletActionContext.getServletContext().getRealPath(path);
        }
    
    
        public void setPath(String path) {
            this.path = path;
        }
    
    
        public String getDocContentType() {
            return docContentType;
        }
    
    
        public void setDocContentType(String docContentType) {
            this.docContentType = docContentType;
        }
    
    
        public File getDoc() {
            return doc;
        }
    
    
        public void setDoc(File doc) {
            this.doc = doc;
        }
    }
    View Code

    action配置(用了个参数,我觉得不错)

            <action name="doUpload" class="com.meetcomet.util.FileUploadAction">
                <param name="path">/upload</param>
                <result name="input">/index.jsp</result>
                <result name="success">/upload_success.jsp</result>
            </action>

    调试过程中的错误:
    1)上传文件夹不存在。

    2)action中的属性缺乏getset。(直接用是会错的...值没有赋上去。)

    三、实现文件上传过滤

    通过配置拦截器来实现的

    <struts>
        <constant name="struts.devMode" value="true" /> 
        <constant name="struts.custom.i18n.resources" value="globalMessg" />
        <constant name="struts.il8n.encoding" value="utf-8"/> 
         <!-- 指定允许上传的文件最大字节数。默认值是2097152(2M) -->
         <constant name="struts.multipart.maxSize" value="10701096"/>
        <!-- 设置上传文件的临时文件夹,默认使用javax.servlet.context.tempdir -->
        <constant name="struts.multipart.saveDir " value="d:/tmp" />
        <package name="/" extends="struts-default">
            <action name="doUpload" class="com.meetcomet.util.FileUploadAction">
                <param name="path">/upload</param>
                <result name="input">/index.jsp</result>
                <result name="success">/upload_success.jsp</result>
                <interceptor-ref name="fileUpload">
                    <!-- 文件过滤 -->
                    <param name="allowedTypes">image/bmp,image/x-png,image/gif,image/pjpeg</param>
                    <!-- 文件大小, 以字节为单位 -->
                    <param name="maximumSize">1025956</param>
                </interceptor-ref>
                <!-- 默认拦截器必须放在fileUpload之后,否则无效 -->
                <interceptor-ref name="defaultStack" />
            </action>
        </package></struts>  
  • 相关阅读:
    linux挂载
    kafka
    使用python27+flask
    arcpy 10.8计算最短路径,并复制出结果
    arcgis pro2.5使用试用
    arcgis engine create featureclass , gp工具
    python和c#的 opencv文字区域识别
    C#调用带参数并输出控制台的python的EXE程序
    arcgis10.8中 python27打包exe文件
    arcgis engine指定范围导出屏幕图片
  • 原文地址:https://www.cnblogs.com/meetcomet/p/3412804.html
Copyright © 2011-2022 走看看