kkfileview自带的每天凌晨三点清除所有缓存的方法是会把所有的文件全部清楚的
自带的删除文件的方法是删除源文件,但是如果之前预览生成了临时本地文件和类似转换过的pdf文件以及图片目录,是不会给你删除的。
这样就有一个坑:因为你只是删除的源文件,并没有删除缓存到本地的问题,所以当你修改源文件重新上传之后,预览到的还是之前缓存的文件。所以在删除文件的时候要清楚缓存+删除缓存到本地的文件。
还有一个坑:上传一个a.pdf然后预览,然后再上传一个a.docx然后你会发现,你预览的文件是之前pdf的文件,重名坑就这么突然的出现了。
先说解决重名的坑,代码如下:
// 文件:OfficeFilePreviewImpl
//String pdfName = fileName.substring(0, fileName.lastIndexOf(".") + 1) + (isHtml ? "html" : "pdf");
//加上一个后缀来区分,这样就不会有重名问题了
String pdfName = fileName.replace(".", "-") + "." + (isHtml ? "html" : "pdf");
注意当你删除office文件时记得你此时缓存到本地的文件名已经是加了后缀的文件了!!!
根据URL删除文件缓存代码:
// 我是通过接口删除的
@GetMapping("/cleanCache")
public void cleanCache(ServletResponse servletResponse, String urlPath, Model model, HttpServletRequest req) throws IOException {
HttpServletResponse response = (HttpServletResponse) servletResponse;
response.addHeader("Access-Control-Allow-Origin", "*");
if (urlPath == null || urlPath.length() == 0) {
logger.info("URL异常:{}", urlPath);
response.setStatus(HttpServletResponse.SC_BAD_REQUEST);
response.setHeader("Content-Type", "text/html; charset=UTF-8");
response.getWriter().println("NULL地址不允许清缓存");
return;
}
String fileUrl;
fileUrl = WebUtils.decodeUrl(urlPath);
String fullFileName = WebUtils.getFileNameFromURL(fileUrl);
FileAttribute fileAttribute = fileHandlerService.getFileAttribute(fileUrl, req);
String suffix = fileAttribute.getSuffix();
// 重名问题遗留的文件名后缀处理
if (FileType.OFFICE.equals(fileAttribute.getType())) {
boolean isHtml