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)
blank

相关推荐

  • 约束条件(constraint)「建议收藏」

    约束条件(constraint)「建议收藏」1.为啥使用约束条件:约束条件也叫完整性约束条件,当对表中的数据做DML操作时会验证数据是否违反约束条件.如果违反了DML操作会失败.约束条件可以应用于表中的一列或几列,应用于整个表或几个表之间.约束条件分类:非空(NOTNULL),唯一(UNIQUE),主键(PRIMARYKEY),外键(FOREIGNKEY),检查(CHECK).其中NOTNULL只能应用于列.

    2022年10月13日
  • PyCharm配置教程[通俗易懂]

    PyCharm配置教程[通俗易懂]一、安装进入pyCharm官网:https://www.jetbrains.com/pycharm。根据自己的操作系统选择相应的下载包。其中专业版是要付费的,可以自行购买,也可以google搜索激活成功教程教程。下载后根据提示安装即可二、配置1.设置主题以及字体大小点击PyCharm,进入preferences选项设置更改主题以及字体颜色2.配置属于自己的文件模板举个例子,如果你要创建一个python文件,那么你可能需要类似这样的代码注释在文件的最上方文件代码注释如果我们

  • 【豆瓣达人总结】做爱做的事,看有趣的人

    【豆瓣达人总结】做爱做的事,看有趣的人惊雀http://www.douban.com/people/4917689/有想法很特别的一位大哥,从另一个角度告诉你什么叫做“人不可貌相”,有位友邻说得好:之所以觉得惊先生特别是因为先生是为数不多思考爱情的帅哥~@东窗未白keledollhttp://www.douban.com/people/keledoll/热血科学心理学女青年,今天才发现她有豆瓣页面。搜索kele

  • IGMP协议原理_IGMP协议详解

    IGMP协议原理_IGMP协议详解IGMP协议概述IGMP(InternetGroupManagementProtocol)因特网组管理协议,是TCP/IP协议簇中负责IP组播成员管理的协议。IGMP协议运行于主机与主机直接相连的组播路由器之间,主要用于维护组播成员关系。IGMP发展了三个版本:IGMPv1:定义了基本的组成员查询和报告过程。IGMPv2:添加了组成员快速离开的机制。IGMPv3:成员可以指定接收…

  • 10v转16v_颜色代码转rgb

    10v转16v_颜色代码转rgb/*  NV12ToARGBcolorspaceconversionCUDAkernel  ThissampleusesCUDAtoperformasimpleNV12(YUV4:2:0planar)  sourceandconvertstooutputinARGBformat*/#include

  • 人际关系处理技巧

    人际关系处理技巧

发表回复

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

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