Java 文件上传 MultipartFile

Java 文件上传 MultipartFileJava文件上传MultipartFile1. 配置MultipartResolver:用于处理表单中的file

大家好,又见面了,我是你们的朋友全栈君。

Java 文件上传 MultipartFile

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

Java 文件上传 MultipartFile

<!-- 配置MultipartResolver 用于文件上传 使用spring的CommosMultipartResolver -->  
    <beans:bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"  
        p:defaultEncoding="UTF-8"  
        p:maxUploadSize="5400000"  
        p:uploadTempDir="fileUpload/temp"  
     >  
    </beans:bean>  

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

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

<form  id="upt_form" name="upt_form" action="" method="post" enctype="multipart/form-data" οnsubmit="return checkformDelSpace(this)">
	<div class="row-form">
		<div class="span2">附件</div>
		<div class="span10">
			<div class="ajaxuploadfile_component_1">
				<div class="ajaxuploadfile_one">
					<div class="span12">
						<div class="input-append file">
							<input type="file" name="file"/>
							<input type="text" id="addFile" readonly="readonly"
									class="funcCall[checkFile]"/>
							<button class="btn" type="button">浏览</button>
						</div>
					</div>
				</div>
			</div>
		</div>
	</div>
</form>


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<String,Object> uptRequestInfoAction(HttpServletRequest request, RequestQueryForm form,
                                                   @RequestParam(value="file", required=false) MultipartFile file) {
        Map<String,Object> map = new HashMap<String,Object>();
        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) 上传表单

<body>
	<h2>上传多个文件 实例</h2>


	<form action="filesUpload.html" method="post"
		enctype="multipart/form-data">
		<p>
			选择文件:<input type="file" name="files">
		<p>
			选择文件:<input type="file" name="files">
		<p>
			选择文件:<input type="file" name="files">
		<p>
			<input type="submit" value="提交">
	</form>
</body>

(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<files.length;i++){
				MultipartFile file = files[i];
				//保存文件
				saveFile(file);
			}
		}
		// 重定向
		return "redirect:/list.html";
	}

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/146552.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • ubuntu安装nginx教程(php网站开发环境)

    一、说明正在尝试基于nginx+php搭建web服务器,中途遇到不少问题。挣扎了三四个小时终于完成了,这里分享下经验。实验环境操作系统:Ubuntu18.0464位nginx:1.14.0php:7.2.17-0php-fram:php7.2-fpm二、实验步骤1、安装必要程序以及依赖#安装程序包sudoapt-getinstallphp7.2…

  • elasticsearch导出大量数据_error attempting to get column

    elasticsearch导出大量数据_error attempting to get column今天在自己本地测试启动ElasticSearch和Kibana时,ElasticSearch已经启动的情况下,去启动Kibana时,报:UnabletoretrieveversioninformationfromElasticsearchnodes.网上找了下资料,说是elasticsearch.yml文件配置问题,但好像并没有说具体是哪里除了问题的。然后自己看了下,因为都是在本地,可能是因为公司网络的原因,不能用localhost,所以,我就把elasticsearch.yml和kiba

  • 解决spark日志清理问题

    解决spark日志清理问题

    2021年11月27日
  • 【一天一个shell命令】文本内容操作系列-grep

    【一天一个shell命令】文本内容操作系列-grep

  • mysql中一条insert语句批量插入多条记录

    mysql中一条insert语句批量插入多条记录插入语句常用写法: INSERTINTOitems(name,city,price,number,picture)VALUES(‘耐克运动鞋’,’广州’,500,1000,’003.jpg’); 这种方式只能够一次插入一条数据,要想插入多条数据,就得多次调用此sql语句,意味着多次与数据库建立连接。但是这样一来,就会增加服务器的负荷,因为,执行每一次SQL服务器都要同样对SQL进行分析、优化等操作。幸好MySQL提供了另一种解决方案,就是使用一条INSERT语句来插入多条记录。这并不是标准的SQ

  • js 符号转换 html代码

    js 符号转换 html代码S转换HTML转义符//去掉html标签//普通字符转换成转意符//转意符换成普通字符//转成空格//回车转为br标签//去除开头结尾换行,并将连续3次以上换行转换成2次换行//将多

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号