// 写入指定文件夹
OutputStream out = new FileOutputStream(file);
out.write(bytes);
// 组装对象
fileMessageVO.setFileName(fileName);
fileMessageVO.setFileRoute(commonfile);
fileMessageVO.setFileDownloadUri(commonfile + fileName);
fileMessageVO.setSize(getPrintSize(file.length()));
fileMessageVO.setFileType(fileName.substring(fileName.lastIndexOf(“.”) + 1));
result.setData(fileMessageVO);
} catch (Exception e) {
e.printStackTrace();
}
return result;
}
public static String getPrintSize(long size) {
// 如果字节数少于1024,则直接以B为单位,否则先除于1024,后3位因太少无意义
if (size < 1024) {
return String.valueOf(size) + “B”;
} else {
size = size / 1024;
}
// 如果原字节数除于1024之后,少于1024,则可以直接以KB作为单位
// 因为还没有到达要使用另一个单位的时候
// 接下去以此类推
if (size < 1024) {
return String.valueOf(size) + “KB”;
} else {
size = size / 1024;
}
if (size < 1024) {
// 因为如果以MB为单位的话,要保留最后1位小数,
// 因此,把此数乘以100之后再取余
size = size * 100;
return String.valueOf((size / 100)) + “.” + String.valueOf((size % 100)) + “MB”;
} else {
// 否则如果要以GB为单位的,先除于1024再作同样的处理
size = size * 100 / 1024;
return String.valueOf((size / 100)) + “.” + String.valueOf((size % 100)) + “GB”;
}
}
}
实体类
public class FileMessage {
/**
- 文件名称
*/
private String fileName;
/**
- 文件路径
*/
private String file 《一线大厂Java面试题解析+后端开发学习笔记+最新架构讲解视频+实战项目源码讲义》无偿开源 威信搜索公众号【编程进阶路】 Route;
/**
- 下载地址
*/
private String fileDownloadUri;
/**
- 文件类型
*/
private String fileType;
/**
- 文件大小
*/
private String size;
}
2.下载
@RestController
public class FileDownload {
@Value(“${commonfile}”)
private String commonfile;
@GetMapping(“/download”)
public String downloadFile(FileMessage fileMessage) throws UnsupportedEncodingException {
// 获取HttpServletResponse
HttpServletResponse response =
((ServletRequestAttributes)RequestContextHolder.getRequestAttributes()).getResponse();
String fileName = fileMessage.getFileName();// 文件名
if (fileName != null) {
// 设置文件路径
File file = new File(commonfile + fileName);
if (file.exists()) {
RequestAttributes requsetAttributes = RequestContextHolder.currentRequestAttributes();
HttpServletRequest request = ((ServletRequestAttributes)requsetAttributes).getRequest();
// 获得浏览器代理信息
final String userAgent = request.getHeader(“USER-AGENT”);
// 判断浏览器代理并分别设置响应给浏览器的编码格式
if (StringUtils.contains(userAgent, “MSIE”) || StringUtils.contains(userAgent, “Trident”)) {
// IE浏览器