附件管理
上一篇文章我们已经分享了有关附件管理的数据库结构,实体类型,获取附件的列表和路径。这篇文章我们继续分享有关Java附件管理的文件上传、下载和删除等操作。
临时文件上传
文件的上传不是直接可以保存进去的,而是在页面操作的时候,将需要上传的文件保存到临时创建的文件夹中,等到最终造作的时候在去临时文件夹中将所需要的文件保存到数据库中。
web页面需要发起POST请求,则controller接收到请求并执行方法。
@Value("${file.tempUrl}")
private String tempPath;
/**
* 临时文件上传
*/
@PostMapping("/uploadTempFile")
public Response uploadTempFile(HttpServletRequest request, HttpServletResponse response) {
//获取token中的用户信息
JSONObject userInfo = GetTokenUtils.getTokenUserInfo(request);
String userId = userInfo.getString("userId");
String uploadTempPath = tempPath + userId + "/";
// 转换request,解析出request中的文件
MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;
// 获取文件map集合
Map<String, MultipartFile> fileMap = multipartRequest.getFileMap();
String fileName = null;
// 循环遍历,取出单个文件
for (Map.Entry<String, MultipartFile> entity : fileMap.entrySet()) {
// 获取单个文件
MultipartFile mf = entity.getValue();
// 获得原始文件名
fileName = mf.getOriginalFilename();
try {
// 创建文件存放路径实例
File dest = new File(uploadTempPath);
// 判断文件夹不存在就创建
if (!dest.exists()) {
dest.mkdirs();
}
// 创建文件实例
File target = new File(uploadTempPath.concat(fileName));
// 判断文件不存在就创建
if (!target.exists()) {
// 利于spring中的FileCopyUtils.copy()将文件复制
FileCopyUtils.copy(mf.getBytes(), target);
}
} catch (IOException e) {
e.printStackTrace();
return new Response(-200,"上传失败");
}
}
return new Response(200,"上传成功");
}
附件上传
在之前的操作中已经将所需要保存到文件保存在我们临时创建的文件夹中。平常的业务不是单单的附件上传,而是一些用户数据伴随着一个附件信息来保存。所以在这里先将用户数据保存好之后再调用附件上传的service方法。
public void saveUploadFiles(String markName, long markId, String description, String userId){
File file = new File(tempPath + userId + "/");
if (file.exists()) {
File[] tf = file.listFiles();
if ((tf == null) || (tf.length == 0)) {
return;
}
Calendar c = Calendar.getInstance();
String folder = c.get(1) + "-" + (c.get(2) + 1);
String uploadFolder = uploadPath + folder + "/";
File dest = new File(uploadFolder);
Date nowTime = Calendar.getInstance().getTime();
for (int i = 0; i < tf.length; ++i) {
if (tf[i].isFile(