上传下载接口
一、接口代码
import cn.hutool.core.io.FileUtil;
import cn.hutool.core.util.StrUtil;
import jakarta.servlet.http.HttpServletResponse;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import java.io.OutputStream;
import java.net.URLEncoder;
import java.util.List;
@RestController
public class FileController {
private static final String filePath = System.getProperty("user.dir")+"/file/";
//上传
@RequestMapping(value = "/upload")
@ResponseBody
public Boolean upload(MultipartFile file) {
String flag = System.currentTimeMillis() + "";
String fileName = file.getOriginalFilename();
try {
if(FileUtil.isDirectory(filePath)){
FileUtil.mkdir(filePath);
}
FileUtil.writeBytes(file.getBytes(), filePath + flag + "-" + fileName);
System.out.println(fileName + "--上传成功");
}catch (Exception e){
System.out.println(fileName + "--上传成功");
}
return true;
}
//下载
@GetMapping(value = "/download/{flag}")
public void download(@PathVariable String flag, HttpServletResponse response) {
if(!FileUtil.isDirectory(filePath)){
FileUtil.mkdir(filePath);
}
OutputStream os;
List<String> fileNames = FileUtil.listFileNames(filePath);
String avatar = fileNames.stream().filter(name -> name.contains(flag)).findAny().orElse("");
try{
if(StrUtil.isNotEmpty(avatar)){
response.addHeader("Content-Disposition", "attachment; filename=" + URLEncoder.encode(avatar, "UTF-8"));
response.setContentType("application/octet-stream");
byte[] bytes = FileUtil.readBytes(filePath + avatar);
os = response.getOutputStream();
os.write(bytes);
os.flush();
os.close();
}
} catch (Exception e) {
System.out.println("文件下载失败");
}
}
}
二、PostMan测试
1.在headers中添加键值对,key为Content-Type,value为multipart/form-data;
2.在body项中选择form-data,key为file,value选择想要上传的文件;