zoukankan      html  css  js  c++  java
  • Struts2上传

    用到的包:一个是commons-fileupload-1.3.2.jar,另一个是commons-io-2.2.jar,没有的话去struts-2.3.31appsWEB-INFlib里面拷。

    第一步:做界面

    1.在webcontent里面建一个包,这里叫Upload,然后新建两个jsp,input是界面,upload是成功跳转的界面

    在input.jsp中的form表单,除了写action和method,还需要加上enctype="multipart/form-data"

    在选择文件的<input>标签中的type要写file

    在upload中写一句话就可以了,仅仅作为一个页面的标记,不写也可以。这里写个“上传成功”

    第二步:做action

    package com.itnba.maya.controller;
    
    import java.io.File;
    import java.io.IOException;
    import java.text.DecimalFormat;
    import java.text.SimpleDateFormat;
    import java.util.Calendar;
    import java.util.Date;
    import java.util.Random;
    import org.apache.commons.io.FileUtils;
    import com.opensymphony.xwork2.ActionSupport;
    
    public class UploadAction extends ActionSupport{
        private String titile;
        private File file;
        private String fileFileName;//文件名
        private String fileContentType;//文件类型
        
        public String getFileFileName() {
            return fileFileName;
        }
        public void setFileFileName(String fileFileName) {
            this.fileFileName = fileFileName;
        }
        public String getTitile() {
            return titile;
        }
        public void setTitile(String titile) {
            this.titile = titile;
        }
        public File getFile() {
            return file;
        }
        public void setFile(File file) {
            this.file = file;
        }
        public String input(){
            return SUCCESS;
        }
        public String upload() throws IOException{
            //随机数
            Random rand = new Random();
            //给随机数一个范围
            int n = rand.nextInt(9999);
            //格式化一下,不够位补0
            DecimalFormat df = new DecimalFormat("0000");
            //把n放到format中格式化
            String s = df.format(n);
            
            //日期格式化
            SimpleDateFormat sim = new SimpleDateFormat("yyyyMMddhhmmss");
            //获取当前时间
            Date now = Calendar.getInstance().getTime();
            //把当前时间格式化
            String prefix = sim.format(now);
            
            //把随机数、时间和文件名拼接作为复制后的文件名
            String newname = prefix+"_"+s+"_"+fileFileName;
            //复制的地址
            File destFile = new File("d://"+newname);
            //执行
            FileUtils.copyFile(file, destFile);
            return SUCCESS;
        }
        
    }

    插入的代码是我们的action的内容,执行一下看下结果。

    上传一个叫新建文本文档.txt,上传成功后我们去D盘找一下

    D盘有了一个加了时间和随机数的新建文本文档

     ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

    -------------------------------------------------------------------------------------------------

    三个成员:1.File类型 2.String fileFileName属性名 3.String fileContentType属性名
    org.apache.commons.io.FileUtils.copyFile很简单。否则用IO流也可以操作。
    用IO流操作
    InputStream is = new FileInputStream(file); 
    OutputStream os = new FileOutputStream(new File(root, fileFileName));

    byte[] buffer = new byte[500];
    int length = 0;

    while(-1 != (length = is.read(buffer, 0, buffer.length)))
    {
    os.write(buffer);
    }

    os.close();
    is.close();

    -------------------------------------------------------------------------------------------------

    1.如何解决文件重名的问题?
    加时间,随机数,用户名,序列号
    2.如何解决大文件上传的问题?
    在struts.xml 中添加常量。这个常量在struts.properties中(/org/apache/struts2/default.properties)。
    <constant name="struts.multipart.maxSize" value="20971520"></constant>

  • 相关阅读:
    Jquery才可以使用 this 指定当前DOM
    微擎使用腾讯地图拾取坐标
    使用 MUI 自制 弹出层
    mui 底部导航栏
    PHP 向数组头部插入数据
    a 标签添加 onclick 事件
    # & 等特殊字符会导致传参失败
    HTML 颜色输入框修改事件的触发,以及获取修改后的颜色
    C++ malloc()函数的注意点及使用示例
    C++ malloc函数
  • 原文地址:https://www.cnblogs.com/liyh123/p/6589004.html
Copyright © 2011-2022 走看看