springboot业务功能实战(十六)文件服务器的上传下载接口
【摘要】
上传
这里有一个实体 用于存放文件信息 存放路径commonfile在配置文件中配置
@RestControllerpublic class FileUpload { @Value("${commonfile}") private String commonfile; /** * 使用Spring MV...
上传
这里有一个实体 用于存放文件信息 存放路径commonfile在配置文件中配置
-
@RestController
-
public class FileUpload {
-
-
@Value("${commonfile}")
-
private String commonfile;
-
-
/**
-
* 使用Spring MVC的multipartFile 类作为参数
-
*
-
* @param multipartFile
-
* @return
-
*/
-
@PostMapping("/upload")
-
@ResponseBody
-
@ArchivesLog(operationName = "上传")
-
public Result<FileMessage> uploadMultipartFile(@RequestParam("file") MultipartFile multipartFile) {
-
Result<FileMessage> result = new Result<FileMessage>();
-
FileMessage fileMessageVO = new FileMessage();
-
String fileName = multipartFile.getOriginalFilename();
-
try {
-
// 获取文件字节数组
-
byte[] bytes = multipartFile.getBytes();
-
// 文件存储路径(/fileupload1/ 这样会在根目录下创建问价夹)
-
File pfile = new File(commonfile);
-
// 判断文件夹是否存在
-
if (!pfile.exists()) {
-
// 不存在时,创建文件夹
-
pfile.mkdirs();
-
}
-
// 创建文件
-
File file = new File(pfile, fileName);
-
// 写入指定文件夹
-
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 fileRoute;
-
-
/**
-
* 下载地址
-
*/
-
private String fileDownloadUri;
-
-
/**
-
* 文件类型
-
*/
-
private String fileType;
-
-
/**
-
* 文件大小
-
*/
-
private String size;
-
}
下载
-
@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浏览器
-
fileName = URLEncoder.encode(fileName, "UTF-8");
-
} else if (StringUtils.contains(userAgent, "Mozilla")) {
-
// google,火狐浏览器
-
fileName = new String(fileName.getBytes("UTF-8"), "ISO8859-1");
-
} else {
-
// 其他浏览器
-
fileName = URLEncoder.encode(fileName, "UTF-8");// 其他浏览器
-
}
-
// 设置HTTP响应头
-
response.reset();
-
// 重置 如果不在页面上显示而是下载下来 则放开注释
-
// response.setContentType("application/octet-stream");// 告知浏览器下载文件,而不是直接打开,浏览器默认为打开
-
// response.addHeader("Content-Disposition", "attachment;filename=\"" + fileName + "\"");// 下载文件的名称
-
-
try {
-
-
OutputStream os = response.getOutputStream();
-
// 读取文件
-
InputStream in = new FileInputStream(file);
-
// copy文件
-
IOUtils.copy(in, os);
-
in.close();
-
os.close();
-
return "下载成功";
-
} catch (Exception e) {
-
e.printStackTrace();
-
}
-
}
-
}
-
return "下载失败";
-
}
-
}
文章来源: baocl.blog.csdn.net,作者:小黄鸡1992,版权归原作者所有,如需转载,请联系作者。
原文链接:baocl.blog.csdn.net/article/details/106129270
【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)