今天在重构项目的时候,发现上传图片之后,因为后台返回的图片地址和原来的一样,回显的图片没有改变,而是显示浏览器缓存的旧图片。
从根本上解决这个问题就是在图片路径带上一个时刻变化的参数,比如当前时间的时间戳。
/**
* 图片上传
* @param file MultipartFile对象
* @param directory 文件上传目录
* @return String 图片的相对路径
*/
public String upload(MultipartFile file, String directory) throws IOException {
boolean result = check(file);
if (result) {
// 得到请求参数中的数据ID
String id = HttpUtils.getRequest().getParameter("id");
// 获取文件名
String originalFilename = file.getOriginalFilename();
assert originalFilename != null;
String fileName = getBase(directory.charAt(1) + "") + Integer.parseInt(id)
+ StringUtils.getFileType(originalFilename);
// 创建目标对象
File targetFile = new File(root + directory, fileName);
// 保存文件
file.transferTo(targetFile);
StringBuilder url = new StringBuilder();
url.append(directory).append("/").append(fileName);
// 解决图片缓存问题
url.append("?timestamp=").append(System.currentTimeMillis());
return url.toString();
}
return null;
}
这是图片上传工具类的上传图片的代码,在图片路径后面拼接了当时间戳,这样浏览器就不会从缓存中获取图片了,而是获取最新的图片~