1.文件上传
文件上传,也称为upload,是指将本地图片、视频、音频等文件上传到服务器上,可以供其他用户浏览或下载的过程。文件上传在项目中应用非常广泛,我们经常发微博、发微信朋友圈都用到了文件上传功能。
import com.itheima.reggie.common.R;
import lombok.extern.slf4j.Slf4j;
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.util.UUID;
/**
* 文件上传和下载
*/
@Slf4j
@RequestMapping("common")
@RestController
public class CommonController {
private String basePath;
/**
* 文件上传
*/
@PostMapping("upload")
public R<String> upload(MultipartFile file) throws Exception {
//file是一个临时文件,需要转存到指定位置,否则本次请求完成后临时文件会删除
log.info(file.toString());
//创建一个目录对象
File dir = new File(basePath);//basePath="d:/img/"
//判断当前目录是否存在
if (!dir.exists()) {
//目录不存在,需要创建
dir.mkdirs();
}
//原始文件名
String originalFilename = file.getOriginalFilename();//abc.jpg
//原始文件名后缀 .jpg
String suffix = originalFilename.substring(originalFilename.lastIndexOf("."));
//使用UUID重新生成文件名,防止文件名称重复造成文件覆盖
String fileName = UUID.randomUUID().toString() + suffix;//dfsdfdfd.jpg
//将临时文件转存到指定位置
file.transferTo(new File(basePath + fileName));"d:/img/"+"dfsdfdfd.jpg"
return R.success(basePath + fileName);
}
}
2.文件下载
文件下载,也称为download
,是指将文件从服务器传输到本地计算机的过程。
下面的下载文件的代码是 直接把文件通过response 设置好响应头,直接返回给浏览器, (后端代码完成的)
然后浏览器自己根据response的响应头的参数去判断此文件是什么类型的,然后再去解析然后进行页面下载.(浏览器自己处理的)
@RestController
@RequestMapping("aa")
public class ExecleController {
/**
* @param outputDir 要下载的文件的绝对路径
* @param response HttpServletResponse
* @throws IOException
*/
public void filedown(String outputDir, HttpServletResponse response) throws IOException {
String downName = "给下载的文件取个名字";
File file = null;
FileInputStream is = null;
try {
response.setContentType("text/html;charset=utf-8");
response.setCharacterEncoding("UTF-8");
response.setHeader("content-disposition", "attachment;filename=\"" + URLEncoder.encode(downName, "utf-8") + "\"");
file = new File(outputDir);
new FileInputStream(file);
ServletOutputStream os = response.getOutputStream();
IOUtils.copy(is, os);
} catch (IOException e) {
e.printStackTrace();
} finally {
if (is != null) {
is.close();
}
if (file != null) {
file.delete();
}
}
}
}