前言
👏作者简介:我是笑霸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.直接用浏览器打开
​​​本质​​​服务端 讲文件以流的形式回写浏览器的过程
url​​​http://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();

}