文件大坑:
web项目:首先不能直接访问本地资源,只能够访问服务器上的资源。
所以我想就储存数据到服务器,但是这样有个问题就是,当重新启动程序时,服务器上的所有文件会被重新编译,导致之前的文件都会不见,相当于不见了
此时我试过很多方法:
1.修改tomcat的service配置文件
没有起作用,感觉前端并不会直接访问到地址
2.修改浏览器访问权限,允许访问本地资源
并没有实现,谷歌浏览器加的指令也不能实现直接访问本地资源
3.储存到项目目录上,
这样修改,可以在服务器重启时,能够得到更换的照片。(但是并不能直接更新)
4.还有就是之前的储存到项目服务器上
不能永久储存
最后解决方法
(一次文件同时储存到项目资源里,还有存储到服务器上面)
到了这最后一步还是有个坑
因为你要写两个文件,同时使用item进行write方法的话,不能保证你write是异步的,所以可能会导致文件写入不成功。
最后实现的代码
String accessToken = request.getHeader("Authorization");
if (accessToken == null) {
response.setStatus(HttpServletResponse.SC_UNAUTHORIZED);
return;
}
String filePath = null;
String uid;
try {
uid = TokenUtil.getUid(accessToken);
} catch (Exception e) {
throw new RuntimeException(e);
}
DiskFileItemFactory factory = new DiskFileItemFactory();
ServletFileUpload upload = new ServletFileUpload(factory);
try {
// 解析请求内容,得到请求的各个部分
List<FileItem> items = upload.parseRequest(request);
if (items.isEmpty()) {
// 如果items为空,说明没有找到文件项
response.getWriter().write("No files uploaded.");
return;
}
// 遍历所有上传的文件项
for (FileItem item : items) {
// 检查是否是上传的文件项
if (!item.isFormField()) {
String fileUploadPath = request.getServletContext().getRealPath("/uploads");
File uploadedFile = new File(fileUploadPath + "\\" + uid + "_avatar.jpg");
System.out.println("文件地址:" + uploadedFile.getAbsolutePath());
// 写入文件
item.write(uploadedFile);
//确保第一个文件先写完,再写第二个文件
File uploadedFile1 = new File("D:" + File.separator + "code" + File.separator + "idea" + File.separator + "csdn" + File.separator + "src" + File.separator + "main" + File.separator + "webapp" + File.separator + "uploads" + File.separator + uid + "_avatar.jpg");
System.out.println("文件地址+名称项目里:" + uploadedFile1.getAbsolutePath());
File parentDir = uploadedFile1.getParentFile();
if (!parentDir.exists()) {
parentDir.mkdirs();
}
Files.copy(uploadedFile.toPath(), uploadedFile1.toPath(), StandardCopyOption.REPLACE_EXISTING);
}
}
// 响应客户端
response.setContentType("text/html;charset=utf-8");
Message message = new Message(uid+"_avatar.jpg", "上传成功", 200);
ObjectMapper mapper = new ObjectMapper();
String s = mapper.writeValueAsString(message);
response.getWriter().write(s);
} catch (Exception e) {
// 处理异常
response.getWriter().write("Error uploading file: " + e.getMessage());
}