package com.atguigu.auth.controller;
import cn.hutool.core.io.FileUtil;
import com.atguigu.common.result.Result;
import com.sun.deploy.net.HttpUtils;
import lombok.SneakyThrows;
import nonapi.io.github.classgraph.utils.FileUtils;
import org.apache.tomcat.util.http.fileupload.IOUtils;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.net.URLEncoder;
@RestController
@RequestMapping("/file")
public class FileController {
private static String ROOT_PATH = System.getProperty("user.dir") + File.separator + "files";
@PostMapping("/upload")
@SneakyThrows
public Result<String> upload(MultipartFile file) {
String fileLink = "";
// 文件的原始名称 ---> 这里面有文件的名称 和 文件的类型 abc.png
String originalFilename = file.getOriginalFilename();
// 文件的主名称 abc
String mainName = FileUtil.mainName(originalFilename);
// 文件的后缀 png
String extendName = FileUtil.extName(originalFilename);
// 当前项目的路径
String projectPath = System.getProperty("user.dir");
// 文件的存储目录
String fileUploadPath = projectPath + File.separator + "files";
String fileName = System.currentTimeMillis() + "-" + originalFilename;
String fileRealUploadPath = fileUploadPath + File.separator + fileName;
File saveFile = new File(fileRealUploadPath);
if (!saveFile.getParentFile().exists()) {
saveFile.getParentFile().mkdirs();
}
// 文件上传
file.transferTo(saveFile);
fileLink = "http:127.0.0.1:8800/file/download/" + fileName;
return Result.ok(fileLink);
}
@GetMapping("download/{fileLink}")
@SneakyThrows
public void download(HttpServletResponse response, @PathVariable("fileLink") String fileLink) {
String filePath = ROOT_PATH + File.separator + fileLink;
if (!FileUtil.exist(filePath)) {
return;
}
File file = new File(filePath);
FileInputStream fileInputStream = new FileInputStream(file);
ServletOutputStream outputStream = response.getOutputStream();
// 页面会展示内容
// response.setContentType("text/plain;charset=UTF-8");
// 页面会下载内容
// response.setHeader("content-disposition","attachment;fileName="+ URLEncoder.encode(fileLink,"utf8"));
// 页面会下载内容 和上面的一样
// response.setContentType("application/octet-stream;charset=UTF-8");
// 在线预览
response.setContentType("text/plain;charset=UTF-8");
// 在线预览 ,这个在线预览好像不太好用的样子
// response.setHeader("content-disposition","inline;fileName="+ URLEncoder.encode(fileLink,"utf8"));
// 写文件的字节流
try {
IOUtils.copy(fileInputStream, outputStream);
} catch (IOException e) {
String message = e.getMessage();
} finally {
// 关闭输入流和输出流动
IOUtils.closeQuietly(fileInputStream);
IOUtils.closeQuietly(outputStream);
}
}
}
Springboot的文件上传和下载
最新推荐文章于 2025-02-27 12:39:40 发布