MVC文件上传与下载

本文详细介绍如何在Spring MVC框架中实现文件上传和下载功能,包括配置multipartResolver、使用MultipartFile处理上传,以及通过ResponseEntity实现文件下载。同时,文章还提供了两种AJAX上传方法的示例代码。

1、spring-mvc.xml配置

bean中的id必须为multipartResolver

 <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
         	<property name="maxUploadSize" value="1048576"></property>
         </bean>

2、表单上传(MVC接受)

@RequestMapping("/doupload")
	public String doUpload(MultipartFile fileName,HttpSession session){
		boolean falg = upload(fileName,session);
		if(falg){
			return "redirect:doSuccess.do";
			
		}else{
			return "redirect:doError.do";
		}
	}

	private boolean upload(MultipartFile file,HttpSession session) {
		boolean flag = false;
		try{
			String fileName = file.getOriginalFilename();
			String sufName = fileName.substring(fileName.lastIndexOf("."));
			String proName = UUID.randomUUID().toString();
			String pathName = proName + sufName;
			File f = new File("H:\\image\\upload\\"+pathName);
			file.transferTo(f);
			flag = true;
			session.setAttribute("path", pathName);
		}catch(Exception e){
			e.printStackTrace();
		}
		return flag;
	}

3、ajax上传(MVC接受)

@RequestMapping("/doAjaxUpload")
	@ResponseBody
	public String doAjaxUpload(@RequestParam MultipartFile file){
		boolean falg = upload(file);
		System.out.println(falg);
		if(falg){
			return "success";
		}else{
			return "error";
		}
		
	}

	private boolean upload(MultipartFile file) {
		System.out.println("001");
		boolean flag = false;
		try{
			String fileName = file.getOriginalFilename();
			String sufName = fileName.substring(fileName.lastIndexOf("."));
			String proName = UUID.randomUUID().toString();
			String fileImgName = proName + sufName;
			File f = new File("H:\\image\\upload\\"+fileImgName);
			file.transferTo(f);
			flag = true;
		}catch(Exception e){
			e.printStackTrace();
		}
		return flag;
	}

4、ajax上传  两种方式

//ajax表单上传 第一种
function doUpload(){
	$("#uploadFormId").ajaxSubmit({
		type:"post",
		url:"attachements/insertAttachement",
		dataType:"json",
		success:function(result){
		alert(result.message);
		findAttachments();
		}
	});
	return false;//防止表单重复提交的一种方式
}
//ajax表单上传 第二种
$("#btn").click(function(){
		alert("click");
		var formData = new FormData($("#form")[0]);
		$.ajax({
			url:"${pageContext.request.contextPath }/ajax/doAjaxUpload.do",
			data:formData,
			cache:false,
			contentType:false,//告诉jQuery不要去设置请求头
			processData:false,//告诉spring不要去处理发送的数据
			success:function(data){
				if(data=="success"){
					alert("上传成功!!!");
				}
			}
			
		})
	})

 mvc文件下载

@RequestMapping("/download")
	public ResponseEntity<byte[]> download(Integer id) throws Exception{
        //获取Attachements对象
		Attachements  att =attachementsService.findAttById(id);
		byte[] by;
		FileInputStream in = new FileInputStream(att.getFilePath());//得到文件路径 用IO流的形式将文件已字节形式存放到by字节数组中
		by = new byte[in.available()];
		in.read(by);
        //进行编码与解码
		String fileName = new String(att.getFileName().getBytes(),"ISO8859-1");
        //设置请求头
		HttpHeaders headers = new HttpHeaders();
		headers.add("Content-Disposition", "attachment;fileName="+fileName);
		ResponseEntity<byte[]> entity = new ResponseEntity<>(by, headers, HttpStatus.OK);
		return entity;
	}

需要导入的依赖

<dependency>
	    <groupId>commons-fileupload</groupId>
	    <artifactId>commons-fileupload</artifactId>
	    <version>1.2.2</version>
	</dependency>
	<dependency>
	    <groupId>commons-io</groupId>
	    <artifactId>commons-io</artifactId>
	    <version>2.4</version>
	</dependency>

 

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值