kkFileView 使用

开源免费好用,在线预览项目解决方案

项目特性

  1. 支持 office, pdf, cad 等办公文档
  2. 支持 txt, xml(渲染), md(渲染), java, php, py, js, css 等所有纯文本
  3. 支持 zip, rar, jar, tar, gzip 等压缩包
  4. 支持 jpg, jpeg, png, gif, tif, tiff 等图片预览(翻转,缩放,镜像)
  5. 使用 spring-boot 开发,预览服务搭建部署非常简便
  6. rest 接口提供服务,跨语言、跨平台特性(java,php,python,go,php,....)都支持,应用接入简单方便
  7. 抽象预览服务接口,方便二次开发,非常方便添加其他类型文件预览支持
  8. 最最重要 Apache 协议开源,代码 pull 下来想干嘛就干嘛

先是直接拉取镜像docker部署,快捷方便

Docker容器环境环境运行

  1. 拉取镜像
docker pull keking/kkfileview
  1. 运行
docker run -it -p 8012:8012 keking/kkfileview
  1. 浏览器访问容器8012端口(http://xxx.xxx.xxx.xxx:8012 )即可看到项目演示用首页

 项目接入使用

当您的项目内需要预览文件时,只需要调用浏览器打开本项目的预览接口,并传入须要预览文件的url,示例如下:

var url = 'http://127.0.0.1:8080/file/test.txt'; //要预览文件的访问地址
window.open('http://127.0.0.1:8012/onlinePreview?url='+encodeURIComponent(base64Encode(url)));

使用是发现一些问题,pull下源码,启动服务

kkFileView 使用_第1张图片

文件下载地址最好是能直接正确下载文件,文件上传后会出现预览按钮。

如果文件很大会需要一定时间处理文件。

    @GetMapping( "/onlinePreview")
    public String onlinePreview(String url, Model model, HttpServletRequest req) {
        String fileUrl;
        try {
            fileUrl = WebUtils.decodeUrl(url);
        } catch (Exception ex) {
            String errorMsg = String.format(BASE64_DECODE_ERROR_MSG, "url");
            return otherFilePreview.notSupportedFile(model, errorMsg);
        }
        FileAttribute fileAttribute = fileHandlerService.getFileAttribute(fileUrl, req);
        model.addAttribute("file", fileAttribute);
        FilePreview filePreview = previewFactory.get(fileAttribute);
        logger.info("预览文件url:{},previewType:{}", fileUrl, fileAttribute.getType());
        return filePreview.filePreviewHandle(fileUrl, model, fileAttribute);
    }

文件预览接口

    @Override
    public String filePreviewHandle(String url, Model model, FileAttribute fileAttribute) {
        // 预览Type,参数传了就取参数的,没传取系统默认
        String officePreviewType = fileAttribute.getOfficePreviewType();
        String baseUrl = BaseUrlFilter.getBaseUrl();
        String suffix = fileAttribute.getSuffix();
        String fileName = fileAttribute.getName();
        String filePassword = fileAttribute.getFilePassword();
        String userToken = fileAttribute.getUserToken();
        boolean isHtml = suffix.equalsIgnoreCase("xls") || suffix.equalsIgnoreCase("xlsx") || suffix.equalsIgnoreCase("csv");
        String pdfName = fileName.substring(0, fileName.lastIndexOf(".") + 1) + (isHtml ? "html" : "pdf");
        String cacheFileName = userToken == null ? pdfName : userToken + "_" + pdfName;
        String outFilePath = FILE_DIR + cacheFileName;
        if (!fileHandlerService.listConvertedFiles().containsKey(pdfName) || !ConfigConstants.isCacheEnabled()) {
            // 下载远程文件到本地,如果文件在本地已存在不会重复下载
            ReturnResponse response = DownloadUtils.downLoad(fileAttribute, fileName);
            if (response.isFailure()) {
                return otherFilePreview.notSupportedFile(model, fileAttribute, response.getMsg());
            }
            String filePath = response.getContent();

    // .....
   }

回去下载远程文件保存到本地,配置文件里配置文件存储地方,在想这里是否会有文件

你可能感兴趣的:(springboot,Java,apache,java)