文件上传
文件上传必须要用post请求,get请求有大小限制
注意:必须开启多媒体标签<form action="http://localhost:8091/file" method="post" enctype="multipart/form-data">"
前端页面,前端name="file"
,后台需要用
<body>
<h1>实现文件上传</h1>
<!--enctype="开启多媒体标签" -->
<form action="http://localhost:8091/file" method="post"
enctype="multipart/form-data">
<input name="fileImage" type="file" />
<input type="submit" value="提交"/>
</form>
</body>
后台接受
/**
* 文件上传入门案例
* url地址:http://localhost:8091/file post
* 参数:fileImage=.......
* @return 字符串
*
* 参数说明:MultipartFile 接口:主要负责实现文件流的接受
* 常识:
* 1.必须指定文件上传的路径信息D:\test\Img\XXX.jpg
* @throws IOException
*/
@RequestMapping("/file")
@ResponseBody
public String LoadImg(MultipartFile fileImage) throws IOException { //还可以用输入流读取文件流InputStream fileImage接受,此处使用springMVC封装的MultipartFile类
//获取文件名称XXX.jpg
String filename = fileImage.getOriginalFilename();
//1.校验图片格式
//1.1图片类型封装
Set<String> imgTypeList=new HashSet<String>();
imgTypeList.add(".jpg");
imgTypeList.add(".png");
imgTypeList.add(".gif");
// 1.2文件后缀名,jpg|JPG (后缀名全部转小写)判断是否图片
String substring = filename.substring(filename.lastIndexOf(".")).toLowerCase();
if(!imgTypeList.contains(substring))
throw new IllegalAccessError("图片格式不正确");
//2.对图片按日期(年/月/日)分类保存或者 hash 分类 创建目录
String localName="d:/testIo/"; //2.1本地缓存目录
String datepath=new SimpleDateFormat("yyyy/MM/dd").format(new Date());//2.2按时间分目录保存
File f=new File(localName+datepath+"/");
if(!f.exists()) {
f.mkdirs(); //2.3如果文件目录不存在,创建多级目录
}
//3.防止用户上传相同名称的图片进行覆盖,重命名文件名(UUID) 指定文件的全部路径真实路径
File file=new File(localName+datepath+UUID.randomUUID().toString()+substring);
//利用transferTo()方法实现文件输出
fileImage.transferTo(file);
return "保存成功";
}
spring boot 的属性配置,解决图片上传太大的问题:
spring:
http:
multipart:
max-file-size: 100Mb #文件上传大小
max-request-size: 200Mb # 最打请求大小
文件下载
通过访问:http://localhost:8091/load
//文件下载
@RequestMapping("/load")
@ResponseBody
public String downImg(HttpServletResponse res) throws IOException {
File file=new File("d:/testIo/2e902cf761494acda51f95732897f420.jpg");
InputStream in=new FileInputStream(file);
ServletOutputStream outputStream = res.getOutputStream();
byte b[]=new byte[1024];
int a=0;
while((a=in.read(b))!=-1) {
outputStream.write(b, 0, a);
}
return "下载成功";
}