我的后台上传图片的代码是这样的:
@Controller
@Slf4j
public class FileController {
private static final SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
public final String allowSuffix = ".bmp.jpg.jpeg.png.gif";
// 根据实际修改图片存储路径
public final String rootPath = "E:\project_money\project_test\paimai1\src\main\webapp\assets\img\uploads\images\";
@RequestMapping(value = "/file/upload", method = RequestMethod.POST)
@ResponseBody
public JsonResult jsonResult(@RequestParam("file") MultipartFile file) {
// 1.文件后缀过滤,只允许部分后缀
// 文件的完整名称,如spring.jpeg
String filename = file.getOriginalFilename();
// 文件名,如spring
String name = filename.substring(0, filename.indexOf("."));
// 文件后缀,如.jpeg
String suffix = filename.substring(filename.lastIndexOf("."));
if (allowSuffix.indexOf(suffix) == -1) {
return new JsonResult().error("不允许上传该后缀的文件!");
}
// 目标文件
String fullPath = rootPath + filename;
File descFile = new File(fullPath);
int i = 1;
// 若文件存在重命名
String newFilename = filename;
while (descFile.exists()) {
newFilename = name + i + suffix;
String parentPath = descFile.getParent();
descFile = new File(parentPath + File.separator + newFilename);
i++;
}
// 判断目标文件所在的目录是否存在
if (!descFile.getParentFile().exists()) {
// 如果目标文件所在的目录不存在,则创建父目录
descFile.getParentFile().mkdirs();
}
// 3.存储文件
// 将内存中的数据写入磁盘
try {
file.transferTo(descFile);
} catch (Exception e) {
e.printStackTrace();
}
// 完整的url
String fileUrl = "/assets/img/uploads/" +"images/"+ newFilename;
return JsonResult.success(fileUrl);
}
}
无论怎么改,上传图片时,只会在本地项目的路径保存,在target包里没有。这就导致了我每次上传图片都无法显示(webapp里是有图片的),只有重新打包后,之前传的图片才会在target包里显示。我甚至在传输图片文件时,也传一份到target包的路径,但还是没用,target包里依旧没有。
之后查阅资料发现,原来如果上传的路径是绝对路径的话,target包是不会保存临时图片的。
所以我把
public final String rootPath = "E:\project_money\project_test\paimai1\src\main\webapp\assets\img\uploads\images\"; 改成 public final String rootPath = "paimai1\src\main\webapp\assets\img\uploads\images\";
问题解决,在上传时,除了本地项目有图片外,target包里也有了。



