天天看点

Springmvc入门(七)文件上传下载文件上传文件下载总结

如何在springmvc中如何实现文件的上传下载?

目录

文件上传

文件下载

总结

文件上传

   获取上传文件的内容:首先文件上传得导入common-io,common-upload

          1.通过CommonsMultipartFile类获取上传的文件内容

@RequestMapping("/fileupload1")
	public String fileUpload(@RequestParam("file") CommonsMultipartFile file)
			throws IllegalStateException, IOException {
		System.out.println("文件名:" + file.getOriginalFilename());
		System.out.println("文件大小:" + file.getSize());
		String path = "E:/" + file.getOriginalFilename();
		File uploadfile = new File(path);
		// 保存文件
		file.transferTo(uploadfile);
		return "success";
	}
           

      2.使用HttpServletRequest接收页面所传导的文件

@RequestMapping("/fileupload2")
	public String fileUpload2(HttpServletRequest request) throws IllegalStateException, IOException {
		CommonsMultipartResolver multipartResolver = new CommonsMultipartResolver(
				request.getSession().getServletContext());
		if (multipartResolver.isMultipart(request)) {
			// 将request变成多部分request
			MultipartHttpServletRequest multiRequest = (MultipartHttpServletRequest) request;
			// 获取multiRequest 中所有的文件名
			Iterator iter = multiRequest.getFileNames();
			while (iter.hasNext()) {
				MultipartFile file = multiRequest.getFile(iter.next().toString());
				if (file != null) {
					System.out.println("文件名:" + file.getOriginalFilename());
					System.out.println("文件大小:" + file.getSize());
					// 保存文件
					Date date = new Date();
					File saveFile = new File("E:/" + file.getOriginalFilename());
					file.transferTo(saveFile);
				}
			}
		}
		return "success";
	}
           

页面上传文件

<form action="fileupload1" method="post" enctype="multipart/form-data">
		<input type="file" name="file"> <input type="submit">
	</form>
	<hr>
	<form action="fileupload2" method="post" enctype="multipart/form-data">
		<input type="file" name="file"> <input type="submit">
	</form>
           

在springmvc的文件中新增多部分文件上传的bean

<bean id="multipartResolver"
		class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
		<property name="maxUploadSize" value="104857600" />
		<property name="maxInMemorySize" value="4096" />
		<property name="defaultEncoding" value="UTF-8"></property>
	</bean>
           

文件下载

采用ResponseEntity

@RequestMapping("/download")
	public ResponseEntity<byte[]> export() throws IOException {
		//需要下载的文件
		String filePath = "F:\\new.txt";
		File file = new File(filePath);
		//HTTP消息头,设置HttpHeaders,使得浏览器响应下载
		HttpHeaders headers = new HttpHeaders();
		// 设置响应方式
		headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);
		// 设置响应文件
		headers.setContentDispositionFormData("attachment", file.getName());
		//返回二进制文件
		return new ResponseEntity<byte[]>(org.apache.commons.io.FileUtils.readFileToByteArray(file), headers,
				HttpStatus.CREATED);
	}
           

文件下载链接

<a href="download" target="_blank" rel="external nofollow" >下载</a>
           

总结

文件保存到磁盘的某个路径,可以使用CommonsMultipartFile的transferTo方法,也可以使用io流进行保存。

文件下载可以使用ResponseEntity,使用commons.io.FileUtils的类对文件进行操作,可以使用io对文件进行操作。

继续阅读