文件上传/下载
原创
©著作权归作者所有:来自51CTO博客作者笑霸final的原创作品,请联系作者获取转载授权,否则将追究法律责任
前言:
👏作者简介:我是笑霸final,一名热爱技术的在校学生。
📝个人主页:个人主页1 || 笑霸final的主页2 📕系列专栏:《项目专栏》
📧如果文章知识点有错误的地方,请指正!和大家一起学习,一起进步👀
🔥如果感觉博主的文章还不错的话,👍点赞👍 + 👀关注👀 + 🤏收藏🤏
目录
文件上传
文件上传
对页面form表单有如下要求
1.methond="post"
2.enctype="multipart/form-data"
type="file"
文件上传需要用到Apache
的commons-fileupload
和commons-io
在spring
中对这个进行了封装 我们只需要在Controller
代码中声明一个MultipartFile
类型的参数就能接受上传的文件
请求 URL: http://localhost:8080/common/upload
请求方法: POST
代码实现
为了动态的实现文件的转存,在yml中写 (文件存放的路径)
package com.xbfinal.reggie.controller;
import com.xbfinal.reggie.common.R;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;
import java.io.File;
import java.io.IOException;
import java.util.UUID;
/**
* 文件的上传和下载
*/
@RestController
@RequestMapping("/common")
public class CommonController {
//读取yml配置文件的位置
@Value("${reggie.path}")
private String basePath;
/**
* 文件上传
* @param file
* @return
*/
@PostMapping("/upload")
public R<String> upload(MultipartFile file){
//原始文件名
final String originalFilename = file.getOriginalFilename();
//获取 .jpg文件后缀
final String substring = originalFilename.substring(originalFilename.lastIndexOf("."));
//随机名
String uuid=UUID.randomUUID().toString() +substring;
//创建一个目录
File file1 = new File(basePath);
//判断目录是否存在
if(!file1.exists()){
//目录不存在就创建
file1.mkdirs();
}
//将文件转存
try{
file.transferTo(new File(basePath+uuid));
}catch (IOException e){
}
return R.success(uuid);//应该返回文件名 文件名前端或做相关的关联
}
}
文件下载
文件下载
两种表现形式:1.以附件形式下载 2.直接用浏览器打开
本质
服务端 讲文件以流的形式回写浏览器的过程
urlhttp://localhost:8080/common/download
请求方式:get
代码:
/**
* 文件下载
* @param name
* @param response
*/
@GetMapping("/download")
public void download(String name, HttpServletResponse response) throws IOException {
//输入流读取文件内容
final FileInputStream fileInputStream
= new FileInputStream(new File(basePath+name));
//输出流将文件写回浏览器
final ServletOutputStream outputStream = response.getOutputStream();
int len=0;
byte[] bytes=new byte[1024];
while ((len=fileInputStream.read(bytes)) != -1){
outputStream.write(bytes,0,len);
outputStream.flush();
}
response.setContentType("image/jpg");
//关闭流
outputStream.close();
fileInputStream.close();
}