SpringBoot(SpringMVC)文件上传下载

SpringBoot(SpringMVC)文件上传下载话说,springboot不是一个全新的框架,它只是将其它框架整合在一起,提供一个”开箱即用”的环境。此文,利用的正是SpringMVC的功能。创建springboot项目:https://blog.csdn.net/weixin_41381863/article/details/106504682文件上传在开发中,文件上传常用的有两种方式。一、利用base64上传文件思路:客户端将要上传的文件转为base64的二进制数据,服务端利用字符串的形式接收参数,然后将base64转为相应的文件

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

话说,springboot不是一个全新的框架,它只是将其它框架整合在一起,提供一个”开箱即用”的环境。此文,利用的正是SpringMVC的功能。

创建springboot项目:https://blog.csdn.net/weixin_41381863/article/details/106504682

文件上传

在开发中,文件上传常用的有两种方式。

一、利用base64上传文件

思路:客户端将要上传的文件转为base64的二进制数据,服务端利用字符串的形式接收参数,然后将base64转为相应的文件。

base64测试数据:

data:image/jpg;base64,R0lGODlh9AH0AfcAAAwSCxgjGQgrGQ42JQs/GgtXIRJDKBJJLhVcKhxQOCZNMy40KDxAN0FEPj9NOCllQRpsMwlwLgx9NxWIOBGPOCSOQS2ZOTadMzeVNTp7T0JpTktuVEtXSVNZT1thVmVoYWZvZV92YVx7ZFyJaWmQcm6Ac3d8c3mJeYGHgYWHh4eMiImPj5GUjZSchYeei32liH+tiYq4j3e0eHqqaIiuVoeuRnmoPWydT1KaVFqePVafJ2edIHOrHHmnLn2wJY26GZG+Fo25Joq7Mo23P564U569a6TDeJ+hnaKopqqqqbOzrqa8p5u8n5vSoqXIlbvOlMDPn8DQprrBuMLCv8THwbzRvL7cucDews3kwMzYx9HSzdTU0tDbz9Xmz+D30eP72eP72eT72eT72eT72eT72ef42ub02+fv3OTr2N3h0tvd0tre1tzf29zj3eLi4efn5unq6eTz6On26uvx6ezs7Ovq9e3u8u/x7/P16/L18fP09fH29O339/b29/f4+Pr6+wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH/C05FVFNDQVBFMi4wAwEBAAAh+QQADAAAACwAAAAA9AH0AQAI/gDDCBxIsKDBgwgTKlzIsKHDhxAjSpxIsaLFixgzatzIsaPHjyBDihxJsqTJkyhTqlzJsqXLlzBjypxJs6bNmzhz6tzJs6fPn0CDCh1KtKjRo0iTKl3KtKnTp1CjSp1KtarVq1izat3KtavXr2DDih1LtqzZs2jTql3Ltq3bt3Djyp1Lt67du3jz6t3Lt6/fv4ADCx5MuLDhw4gTK17MuLHjx5AjS55MubLly5gza97MubPnz6BDix5NurTp06hTq17NurXr17Bjy55Nu7bt27hz697Nu7fv38CDCx9OvLjx48iTK1/OvLnz59CjS59Ovbr169iza9/Ovbv37+DD/osfT768+fPo06tfz769+/fw48ufT7++/fv48+vfz7+///8ABijggAQWaOCBCCao4IIMNujggxBGKOGEFFZo4YUYZqjhhhx26OGHIIYo4ogklmjiiSimqOKKLLbo4oswxijjjDTWaOONOOao44489ujjj0AGKWRuXmRRhRJIJinFklRQkcWTUELJxZRpVFnlGm2goeWWZ5xhxpdgftnlmFuWaeaZaKZppZVdtNnFlFE+eYWRVdRZ55NdfDEkT1MckYIJgAaKQgorHHEEEogiocSSjE7RZJNabLGGG2+8AcelcNyh6aacakoHHG64wcYapJZq6qmoprrFqo8+OsUU/lIokaihR7DAwgosoBAooCmwoEQWe+r0hRIrmOCBBx8k+wGvLByKaBJJLBqrFI4+ugUbb9Dhxx/c/uHHtt92y+23fuxx6RturCFpqqiu6u678GrRKhWwxqpEEkjQaqsKKfwJAgjKmqACElKYESxOXyRRrLIfgFCCCSio0GyiSEC7qBJLSPFoFly0EYcc4pIr8rd4lIyHHHLEEUcbbXKxRZwwxwxzpFrIOy+jSCJaqwss8JuCroB+4AEIKRyhRBwH46QECyksO6gKuNp6RBJLVC2tFFUsWa2TXXgsRx4i4zEuuSaXjLKWLT8577wyxwzvqmpTkTXGS1B8658mLJus/glFH530TVKkUEIHxxb+QQgllHDCCSi84MLjjj/uQgwxTM4EE1UvcTWjSybp+b35HtHC47RKbvrklKeu+upMUHw5E5SbjsLiJyRewr9CE44s4ixIQcbfNknhAQcLFG/8Agoo4AAHHGjg/AYbZAA99COMIMIIJGR/wguOt+D999/bKn7PtJ9AQgnZp6/++utX7/778Ls/PfTOa8D8Aw00wAADC+y/vAYn4ALwbPICBQwAAAhMIAAEIAACEMAABzgAAiaIAAhY8AEZyCAONniDGXjQg+D7XhFG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

服务端核心代码如下:

@PostMapping("/uploadByBase64")
	@ResponseBody
	public String uploadByBase64(String base64) {
		if(base64==null || base64.length()==0) {
			return "上传文件不能为空";
		}
        // base64数据示例:data:image/jpg;base64,R0lGOD...省略后半段
		// 取出"data:image/jpg;base64,"后面的部分
		String[] arr = base64.split("base64,");
		// 利用Base64Utils格式化(spring的工具包:org.springframework.util.Base64Utils)
		byte[] bytes = Base64Utils.decodeFromString(arr.length>1 ? arr[1] : arr[0]);
		// 这里示例base64转图片,其他文件类型自行安排
		InputStream is = new ByteArrayInputStream(bytes);
		try {
			BufferedImage image = ImageIO.read(is);
			// 将图片上传到E盘的upload路径下
			String path = "E:/upload";
			File pathFile = new File(path);
			if(!pathFile.exists()) {
				// 路径不存在则创建一个路径
				pathFile.mkdirs();
			}
			String fileName = "xxx.jpg";
			ImageIO.write(image, "jpg", new File(path + File.separator + fileName));
		} catch (IOException e) {
			return "上传失败:"+e.getMessage();
		}finally {
			if(is != null) {
				try {
					is.close();
				} catch (IOException e) {
					return "上传失败:"+e.getMessage();
				}
			}
		}
		return "上传成功";
	}

二、利用multipart/form-data上传文件

将http请求的ContentType设置为multipart/form-data之后,则会将数据已二进制的形式提交。区别于x-www-form-urlencoded(即常说的表单形式)提交方式,x-www-form-urlencoded只能上传键值对,比如:name=zhangsan&age=18。multipart/form-data既可以上传文件等二进制数据,也可以上传表单键值对。(除以上两种方式之外,ContentType还有其它很多值,比如常见的application/xml,传递xml格式,application/json,传递json等)

html代码示例:

<!--action:接口地址,enctype:编码形式,method:请求方式-->
	<form action="/upload" enctype="multipart/form-data" method="post">
		<!--name即是文件的参数名-->
		<input type="file" name="file"/>
		<input type="submit" value="上传" />
	</form>

服务端核心代码:

@PostMapping("/upload")
	@ResponseBody
// 还可以将MultipartFile封装到自定义对象中,用自定义对象接收参数
	public String upload(MultipartFile file) {
		if(file==null || file.isEmpty()) {
			return "文件不能为空";
		}
		// 文件上传路径
		String path = "E:/upload";
		File pathFile = new File(path);
		if(!pathFile.exists()) {
			// 路径不存在则创建一个路径
			pathFile.mkdirs();
		}
		// 获取上传文件的名称,可以自定义其他名字.除此,MultipartFile还可以直接获取文件流等其它操作
		String fileName = file.getOriginalFilename();
		try {
			// 将文件保存到目标目录
			file.transferTo(new File(path + File.separator + fileName));
		} catch (IOException e) {
			return "上传失败:" + e.getMessage();
		}
		return "上传成功";
	}

 注意:springboot默认接收的数据大小是1M。如果上传的文件+其它信息的数据大小超过1M,服务端则会报错拒绝。需要作以下配置:

# 最大请求大小
spring.servlet.multipart.max-request-size=30MB
# 最大请求文件大小
spring.servlet.multipart.max-file-size=30MB

文件下载

在开发中,文件下载常用的也有三种方式

一、利用url链接的方式。(灵活性高,推荐。如果客户端是浏览器,前后端代码不在一个服务器加载,会存在跨域问题,需要代理解决)。

思路:服务端返给客户端一个可以访问的路径。常用的当然是http协议(比如:http://127.0.0.1:8080/static/xxx.jpg),还可以是ftp协议等(比如:ftp://127.0.0.1:8443/static/xxx.pdf)。客户端拿到这个可以利用网络访问的地址之后,下载相应的资源。

二、利用base64

思路:在服务端,将文件转为base64字符串,然后返回给客户端。客户端再将其转为相应格式的文件。

三、利用SpringMVC的ResponseEntity<T>

利用ResponseEntity<T>可以很方便的将http响应设置为文件下载方式,并携带文件的二进制数据。

/**
	 * @param fileName : 下载的文件默认命名
	 * */
	// 不能使用@ResponseBody,当前类也不能使用@RestController(只能使用@Controller)
	@RequestMapping("/download")
	public ResponseEntity<byte []> downLoad(String fileName){
		// 下载目标定义为:F:\\bear.jpg
		File file = new File("F:\\bear.jpg");
		if(!file.exists()) {
			throw new RuntimeException("下载的目标文件不存在");
		}
		HttpHeaders headers = new HttpHeaders();
		String downLoadFileName = "";
		if(fileName != null && fileName.length()!=0) {
			try {
				// 解决下载文件以中文命名乱码
				downLoadFileName = URLEncoder.encode(fileName, "UTF-8");
			} catch (Exception e) {
				downLoadFileName = "xxx.jpg";
			}
		}else {
			// 这里是jpg作为示例,如果是其他类型文件,以相应类型命名,比如xxx.pdf
			downLoadFileName = "xxx.jpg";
		}
		// 通知浏览器以下载的方式打开
		headers.setContentDispositionFormData("attachment", downLoadFileName);
		// 设置http响应类型为二进制数据流
		headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);
		// http响应码为200
		return new ResponseEntity<byte[]>(this.readFileToByteArray(file), headers, HttpStatus.OK);
	}
	
	private byte[] readFileToByteArray(File file) {
		byte[] data = null;
		FileInputStream is = null;
		ByteArrayOutputStream byteOut = null;
		try {
			is = new FileInputStream(file);
			byteOut = new ByteArrayOutputStream();
			int len = 0;
	        byte[] buffer = new byte[1024];
	        while ((len = is.read(buffer)) != -1) {
	        	byteOut.write(buffer, 0, len);
	        }
	        data = byteOut.toByteArray();
		} catch (Exception e) {
			e.printStackTrace();
		}finally {
			if(is != null) {
				try {
					is.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
			if(byteOut != null) {
				try {
					byteOut.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
		}
		return data;
	}

 

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

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

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

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

(0)


相关推荐

  • matlab中0/0_matlab样条插值

    matlab中0/0_matlab样条插值“matlab里a(i)~=0”的解释如下:确定数组a的第i个元素是否不等于0。如果不等于0,则结果为true,否则为false。分析:a(i)表示数组a中的第i个元素,在Matlab中,“~”表示非,“~=”表示不等于(≠)。例如:1、打开matlab并在命令窗口中输入示例数组>>a=-1:32、确定a的第一个元素是否不等于0:>>a(1)~=0因为a的第一个元…

  • vim 退出命令(保存、放弃保存)_linux保存并退出vim

    vim 退出命令(保存、放弃保存)_linux保存并退出vim测试环境VMware12Pro下CentOS7自带vim7.4.1099今天下午第一次接触这个vim文本编辑器,拿到一个陌生的工具,我们想的当然是最短的时间掌握它的基本操作,体会到成就感。如果你跟我一样,那么这篇教程或许对你有所帮助。Linux下一切皆文件,所以需要强大的文本编辑器,而vim就是Linux上一个功能强大且使用广泛的文本编辑器。它可以建立、编辑、现实文件,并且它只有命令没…

  • R和Rstudio安装教程[通俗易懂]

    R和Rstudio安装教程[通俗易懂]一、R的下载和安装1.首先我们去下载一个R,可以直接点击下面的超链接:R下载地址,然后选择与你的操作系统匹配的版本在这里我们用windows系统来举例,点击图片中箭头所指的链接进行下载2.下载完成以后我们就开始进行安装,双击R安装包(R-3.6.0-win.exe)进行安装根据自己的需要选择语言,点击确定点击Next安装位置尽量选择D盘如果电脑是32位的,就把64位去…

  • Ubuntu 安装 Anaconda3 详细步骤

    Ubuntu 安装 Anaconda3 详细步骤主要介绍在Ubuntu14.04中安装Anaconda3的详细过程

  • the driver is not supported on_GetPeDriver

    the driver is not supported on_GetPeDriver1.添加头文件#ifdefCONFIG_HAS_EARLYSUSPEND#include#endif2.在驱动结构体中添加early_suspend结构体#ifdefCONFIG_HAS_EARLYSUSPEND structearly_suspendearly_suspend;#endif /*CONFIG_HAS_EARLYSUSPEND*/3.在驱

  • 用或启用Windows自动更新命令行

    用或启用Windows自动更新命令行

发表回复

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

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