>  기사  >  Java  >  사용자 관리의 파일 업로드 기능

사용자 관리의 파일 업로드 기능

巴扎黑
巴扎黑원래의
2017-07-20 13:25:401516검색

需求

完成用户文件上传

  1:将上传的文件统一放置到upload的文件夹下

  2:将每天上传的文件,使用日期格式的文件夹分开,将每个业务的模块放置统一文件夹下

  3:上传的文件名要指定唯一,可以使用UUID的方式,也可以使用日期作为文件名

  4:封装一个文件上传的方法,该方法可以支持多文件的上传,即支持各种格式文件的上传

  5:保存路径path的时候,使用相对路径进行保存,这样便于项目的可移植性


实现步骤

1.在util包下封装一个方法

public class FileUtils {    /**  
    * @Name: fileUploadReturnPath
    * @Description: 文件上传,返回panth路径
    * @Parameters: file:上传文件
    *                fileName:上传文件名
    *                model:模块名称
    * @Return: String:返回上传路径
    * 1:完成文件上传的要求
          1:将上传的文件统一放置到upload的文件夹下
          2:将每天上传的文件,使用日期格式的文件夹分开,将每个业务的模块放置统一文件夹下
          3:上传的文件名要指定唯一,可以使用UUID的方式,也可以使用日期作为文件名
          4:封装一个文件上传的方法,该方法可以支持多文件的上传,即支持各种格式文件的上传
          5:保存路径path的时候,使用相对路径进行保存,这样便于项目的可移植性*/public static String fileUploadReturnPath(File file, String fileName, String model) {//1.获取upload文件夹路径String basePath = ServletActionContext.getServletContext().getRealPath("/upload");//2.获取日期格式的文件夹(格式yyyy/MM/dd/)String datePath=DateUtils.dateToStringByFile(new Date());//3.全路径格式(例如:upload\2017\7\8\用户管理)String filePath=basePath+datePath+model;//4.判断该文件夹是否存在,若不存在,创建File dateFile = new File(filePath);if(!dateFile.exists()){
            dateFile.mkdirs();
        }//5.指定对应文件名//获取文件名后缀String suffix = fileName.substring(fileName.lastIndexOf("."));//设置文件名为uuidString uuidFileName = UUID.randomUUID().toString()+suffix;//目标文件File destFile = new File(dateFile,uuidFileName);//上传文件        file.renameTo(destFile);return "/upload"+datePath+model+"/"+uuidFileName;
    }

}

 

2.jsp页面的表单要求

  当导入struts2的jar包时,struts2会默认支持使用fileupload工具上传文件

设置表单属性: enctype=multipart/form-data          表单类型

        method=post           提交方式

       name=uploads                   文件域名称

<form name="Form1"action="${pageContext.request.contextPath }/system/elecUserAction_save.do"method="post" enctype="multipart/form-data"><s:file name="uploads" id="uploads" cssStyle="width:450px;"></s:file> *</form>

 

3.VO对象中添加非持久化javabean属性

    //上传文件private File[] uploads;//上传文件名,该变量的定义必须是上传表单file字段name属性值+FileNameprivate String[] uploadsFileName;//上传文件类型,该变量的定义必须是上传表单file字段name属性值+ContentTypeprivate String[] uploadsContentType;
  public File[] getUploads() {return uploads;
    }public void setUploads(File[] uploads) {this.uploads = uploads;
    }public String[] getUploadsFileName() {return uploadsFileName;
    }public void setUploadsFileName(String[] uploadFileName) {this.uploadsFileName = uploadFileName;
    }public String[] getUploadsContentType() {return uploadsContentType;
    }public void setUploadsContentType(String[] uploadContentType) {this.uploadsContentType = uploadContentType;
    }

 

4.Service中添加方法

  在用户service实现类中添加附件保存的方法saveUserFile(),并在上篇讲到的saveUser()方法中进行调用

/** * 遍历多个附件,组织附件的PO对象,完成文件上传,保存用户的附件(多条数据),建立附件表和用户表的关联关系
     * @param elecUser     */private void saveUserFiles(ElecUser elecUser) {
        Date date = new Date();//获取上传的文件File[] files = elecUser.getUploads();//获取文件名String[] fileNames = elecUser.getUploadsFileName();//获取文件类型String[] contentType = elecUser.getUploadsContentType();//遍历if(files!=null&&files.length>0){for(int i=0;i<files.length;i++){//组织PO对象ElecUserFile elecUserFile = new ElecUserFile();
                elecUserFile.setFileName(fileNames[i]);
                elecUserFile.setProgressTime(date);//将文件上传,同时返回路径pathString fileURL=FileUtils.fileUploadReturnPath(files[i],fileNames[i],"用户管理");
                elecUserFile.setFileURL(fileURL);
                elecUserFile.setElecUser(elecUser);//重要:与用户建立关联关系,如果不建立,外键为null//保存附件                elecUserFileDao.save(elecUserFile);
            }
        }
    }

5.struts2上传文件大小限制

  struts2默认可以上传的文件最大限制是2M,如果上传文件大小超过2M,控制台错误如下:

org.apache.commons.fileupload.FileUploadBase$SizeLimitExceededException: the request was rejected because its size (77817949) exceeds the configured maximum (2097152)

  该异常信息是common-fileupload组件输出的,而非是Struts2框架

解决办法:在struts.xml中设置上传组件的文件大小限制

<!-- 设置最大上传的大小是80M --><constant name="struts.multipart.maxSize" value="83886080"></constant>

 

위 내용은 사용자 관리의 파일 업로드 기능의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.