SpringBoot上传文件下载文件>>>>>>>>>>>>>直接上代码,一看就懂
程序员文章站
2022-04-30 22:17:12
...
import com.gsww.lad.common.util.R;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletResponse;
import java.io.*;
/**
* @date 2019/2/21 11:02
*/
@RestController
@RequestMapping("/file")
public class FileUploadController {
String FILE_DIR = "D:/temp/files/";
@PostMapping("/uploadFile")
public R<String> fileUpload(@RequestParam("file")MultipartFile file){
R<String> r = new R();
//判断文件是否为空
if(file.isEmpty()){
r.setMsg("文件为空");
r.setCode(R.FAIL);
}
try{
// 获取文件名
String fileName = file.getOriginalFilename();
// 获取文件的后缀名
String suffixName = fileName.substring(fileName.lastIndexOf("."));
// 设置文件存储路径
String filePath = FILE_DIR;
String path = filePath + fileName;
File dest = new File(path);
// 检测是否存在目录
if (!dest.getParentFile().exists()) {
dest.getParentFile().mkdirs();// 新建文件夹
}
file.transferTo(dest);// 文件写入
r.setCode(R.SUCCESS);
r.setData(fileName);
r.setMsg("上传成功");
}catch (IOException e){
e.printStackTrace();
r.setCode(R.FAIL);
}
return r;
}
@RequestMapping(value="/download",method = RequestMethod.GET)
public void download(String fileName, HttpServletResponse response) throws UnsupportedEncodingException {
File file=new File(FILE_DIR,fileName);
if(file.exists()){
//首先设置响应的内容格式是force-download,点击下载按钮就会自动下载
response.setContentType("application/force-download");
//通过设置头信息给文件命名
String userAgent = request.getHeader("User-Agent");
//针对IE或以IE为内核的
if (userAgent.contains("MSIE") || userAgent.contains("Trident")){
fileName = java.net.URLEncoder.encode(fileName,"UTF-8");
}else {
//非IE
fileName = new String(fileName.getBytes("UTF-8"),"ISO-8859-1");
}
response.addHeader("Content-Disposition",String.format("attachment; filename=\"%s\"", fileName));
byte[]buffer=new byte[1024];
FileInputStream fis=null;
BufferedInputStream bis=null;
try{
fis=new FileInputStream(file);
bis=new BufferedInputStream(fis);
OutputStream os=response.getOutputStream();
int i=bis.read(buffer);
while(i!=-1){
os.write(buffer,0,i);
i=bis.read(buffer);
}
}catch (IOException e){
e.printStackTrace();
}finally {
try {
if(bis!=null){
bis.close();
}
if(fis!=null){
fis.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}