需求:上传文件到指定目录/从指定目录下载文件
@Service
public class TransferService implements ITransferService {
@Value("${upload.dir}") //d:oo
private String uploadDir;
/**
* 上传文件
*
* @param file
* @return
*/
@Override
public String upload(MultipartFile file) {
JSONObject result = new JSONObject();
if (file.isEmpty()) {
result.put("error", "空文件");
return result.toString();
}
//原始文件名
String originalFilename = file.getOriginalFilename();
//拿到后缀名
String suffixName = originalFilename.substring(originalFilename.lastIndexOf("."));
//生成文件名
String fileName = System.currentTimeMillis() + suffixName;
//上传文件目录
File fileTempObj = new File(uploadDir + "/" + fileName);
//如果文件父路径不存在则创建
if (!fileTempObj.exists()) {
fileTempObj.getParentFile().mkdirs();
}
try {
file.transferTo(fileTempObj);
} catch (IOException e) {
e.printStackTrace();
result.put("error", "文件上传失败");
return result.toString();
}
result.put("success", "文件上传成功");
return result.toString();
}
/**
* 下载文件
*
* @param response
* @param fileName
* @return
*/
@Override
public String download(HttpServletResponse response, String fileName) {
JSONObject result = new JSONObject();
//在上传文件目录中查看文件是否存在
File file = new File(uploadDir + "/" + fileName);
if (!file.exists()) {
result.put("error", "下载文件不存在");
return result.toString();
}
response.reset();
response.setContentType("application/octet-stream");
response.setCharacterEncoding("utf-8");
response.setContentLength((int) file.length());
response.setHeader("Content-Disposition", "attachment;filename=" + fileName);
//cn.hutool.core.io.FileUtil;
byte[] bytes = FileUtil.readBytes(file);
try {
OutputStream outputStream = response.getOutputStream();
outputStream.write(bytes);
} catch (IOException e) {
e.printStackTrace();
result.put("error", "下载文件失败");
return result.toString();
}
result.put("success", "文件下载成功");
return result.toString();
}
}