Java 文件上传 MultipartFile

Java 文件上传 MultipartFile

1. 配置MultipartResolver:用于处理表单中的file

Java 文件上传 MultipartFile_第1张图片

  
      
      

defaultEncoding="UTF-8"               是请求的编码格式,默认为iso-8859-1
maxUploadSize="5400000"            是上传文件的大小,单位为字节
uploadTempDir="fileUpload/temp"  为上传文件的临时路径

2.创建上传表单, 在form标签中加上enctype="multipart/form-data"表示该表单是要处理文件的

附件


3 js 控制验证上传文件格式 funcCall[checkFile]

//***********************************上传验证**********************************
	function checkFile(field, rules, i, options) {
		//上传文件验证
		var urlStr = field.val();
		if (null == urlStr || urlStr == "") {
			return;
		}
		if (urlStr != "") {
			var urlType = urlStr.substring(urlStr.lastIndexOf(".") + 1, urlStr.length);
			urlType = urlType.toLowerCase();
			if (urlType == "jpg" || urlType == "png" || urlType == "jpeg" || urlType == "gif" || urlType == "bmp") {
			}
			else {
				return options.allrules.validatePhoto.alertText;
			}
		}
	}

3.创建一个控制类:上传Controller


	/**
     * 修改需求Action
     *
     * @param request HttpServletRequest
     * @param form    form表单
     * @param file    文件
     * @return String
     */
    @RequestMapping("uptRequestInfoAction.do")
    @ResponseBody
    public Map uptRequestInfoAction(HttpServletRequest request, RequestQueryForm form,
                                                   @RequestParam(value="file", required=false) MultipartFile file) {
        Map map = new HashMap();
        User user = (User) SessionUtil.getSessionAttribute(request, "loginUser", User.class);
       
        try {
			// 判断文件是否为空
            if(!file.isEmpty()){
                String uploadFileName = file.getOriginalFilename();
                //上传文件
                String pattern = "";
                if (uploadFileName.contains(".")) {
                    pattern = uploadFileName.substring(uploadFileName.lastIndexOf("."));
                }
                String fileName = "*****" + "_" +
                        DateExtendUtil.formatDate2String(new Date(), "yyyyMMddHHmmssSSS") +
                        pattern;
                String tmpFilePath = servletPath + "/" + fileName;
                File tmpFile = new File(tmpFilePath);
                // 写入临时文件
                if (!tmpFile.getParentFile().exists()) {
                    tmpFile.getParentFile().mkdirs();
                }
				// 转存文件 
                file.transferTo(tmpFile);

                InsertReqDTO insertReqDTO = new InsertReqDTO();
                //文件名
                insertReqDTO.setFileName(fileName);
                //机构编码
                insertReqDTO.setOrgCode("baofoo");
                //文件组(参照枚举类FileGroup 不同文件组存放时效不同)
                insertReqDTO.setFileGroup(FileGroup.AUTHENTICATION);
                //文件日期
                insertReqDTO.setFileDate(DateUtil.getCurrent(DateUtil.fullPatterns));
                //备注信息
                insertReqDTO.setRemark("需求信息附件");
                //上传文件路径
                insertReqDTO.setFilePath(tmpFilePath);
                //文件名,机构编码,文件日期 不能重复
                log.info("call 需求信息附件 Param {}:", ToStringBuilder.reflectionToString(insertReqDTO,
                        ToStringStyle.SHORT_PREFIX_STYLE));
                CommandResDTO resDTO = DfsClient.upload(insertReqDTO);
                log.info("call 需求信息附件 result {}", ToStringBuilder.reflectionToString(resDTO,
                        ToStringStyle.SHORT_PREFIX_STYLE));
                // 附件地址
                form.setFile_url(FormatUtil.toString(resDTO.getFileId()));
                // 附件类型
                form.setFile_type(pattern.toLowerCase());
            }
            int uptTag = requestQueryService.uptRequestInfo(form);
            // 记录操作日志
            int r  = requestQueryService.addInsertEvent(form);
            if(r < 1 || uptTag < 1){
                map.put("retCode",0);
                map.put("retMsg","修改需求信息失败!");
                log.info("需求信息更新失败:【日志记录】call requestQueryService addInsertEvent:{}",r);
                log.info("需求信息更新失败:call requestQueryService uptRequestInfo:{}",uptTag);
            }else{
                map.put("retCode",1);
                map.put("retMsg","修改需求信息成功!");
            }
        } catch (Exception e) {
            log.error("call uptRequestInfoAction  修改异常 ******", e);
            map.put("retCode",0);
            map.put("retMsg","修改需求信息失败!"+e);
        }
        return map;
    } 
下载保存附件:

/**
     * 下载非图片的附件
     * @param request  HttpServletRequest
     * @param response HttpServletResponse
     */
    @RequestMapping("downloadFile.do")
    public void downloadFile(HttpServletRequest request, HttpServletResponse response) {
        InputStream in = null;
        OutputStream out = null;
        try {
            Long file_id = Long.valueOf(request.getParameter("file_id"));

            if (file_id == null || file_id == 0L) {
                throw new ServiceException("requestQueryManager downloadFile 传入的dfs文件id错误");
            }

            QueryReqDTO reqDTO = new QueryReqDTO();
            reqDTO.setFileId(file_id);
            reqDTO.setOperation(Operation.QUERY);
            log.info("downloadExcel QueryReqDTO:" + ToStringBuilder.reflectionToString(reqDTO));

            Response res = SocketUtil.sendMessage(reqDTO);
            if (!res.isSuccess()) {
                throw new DfsException(ErrorCode.GET_FILE_INFO_ERROR, res.getErrorMsg());
            }
            CommandResDTO resDTO = (CommandResDTO) res.getResult();

            String file_Name = resDTO.getFileName();

            DfsClient.download(reqDTO, downloadUrl);
            response.reset(); // 清空缓存区
            String fileName = new String(file_Name.getBytes("Gb2312"), "ISO-8859-1"); // 文件名称的编码
            response.setHeader("Content-Disposition", "attachment;fileName=" + fileName); // 设置文件头
            File file = new File(this.downloadUrl + "/" + file_Name);
            in = new FileInputStream(file);
            int len;
            byte[] buffer = new byte[1024];
            out = response.getOutputStream();
            while ((len = in.read(buffer)) > 0) {
                out.write(buffer, 0, len);
            }
        } catch (Exception e) {
            if(e instanceof ServiceException){
                log.error("call requestQueryManager downloadFile Exception:{}", e.getMessage());
            }else {
                log.error("call requestQueryManager downloadFile Exception:{}", e);
            }
        } finally {
            IOUtils.closeQuietly(in);
            IOUtils.closeQuietly(out);
        }
    }

(1) 通过MultipartFile的transferTo(File dest)这个方法来转存文件到指定的路径

(2)采用MultipartFile上传文件是可以为空,可以多个文件上传

(3)String getContentType()//获取文件MIME类型 InputStream getInputStream()//取文件流 String getName() //获取表单中文件组件的名字
String getOriginalFilename() //获取上传文件的原名 long getSize() //获取文件的字节大小,单位byte boolean isEmpty() //是否为空 void transferTo(File dest) 


4. 多文件上传

(1) 上传表单


	

上传多个文件 实例

选择文件:

选择文件:

选择文件:


(2)上传Controller

/**** 
 *保存文件
 * @param file
 * @return
 */
	private boolean saveFile(MultipartFile file) {
		// 判断文件是否为空
		if (!file.isEmpty()) {
			try {
				// 文件保存路径
				String filePath = request.getSession().getServletContext().getRealPath("/") + "upload/"
						+ file.getOriginalFilename();
				// 转存文件
				file.transferTo(new File(filePath));
				return true;
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
		return false;
	}
 编写action:
	@RequestMapping("filesUpload")
	public String filesUpload(@RequestParam("files") MultipartFile[] files) {
		//判断file数组不能为空并且长度大于0
		if(files!=null&&files.length>0){
			//循环获取file数组中得文件
			for(int i = 0;i




你可能感兴趣的:(JAVA,WEB)