kkFileView文件预览

简介: kkFileView文件预览

1、下载kkFileView-4.2.1并启动(双击bin\startup.bat)

2、上传文件

public R add(UserInSession uis, MultipartFile file) throws IOException {
        if (file == null) {
            return R.fail("上传的文件为空");
        }
        long size = file.getSize();
        if (size > 100 * 1024 * 1024) {
            return R.fail("文件大小不能超过 100M");
        }
        String fn = file.getOriginalFilename();
        String extension = FileUtil.extName(fn);
        if (StrUtil.isBlank(extension)) {
            return R.fail("文件扩展名不能为空");
        }
        extension = extension.trim();
        if (extension.length() > 10) {
            return R.fail("文件扩展名长度不能超过 10");
        }
        String fileNameClient = fn.substring(0, fn.length() - extension.length() - 1);
        if (StrUtil.isBlank(fileNameClient)) {
            return R.fail("文件名不能为空");
        }
        fileNameClient = fileNameClient.trim();
        if (fileNameClient.length() > 64) {
            return R.fail("文件名长度不能超过 64");
        }
        String fileNameServer = IdUtil.simpleUUID().toLowerCase();
        File f = new File();
        f.setUuid(IdUtil.simpleUUID().toLowerCase());
        f.setFileNameServer(fileNameServer);//存储在数据库中的文件名字,也是存在磁盘中的文件名字
        f.setFileNameClient(fileNameClient);
        f.setExtension(extension.toLowerCase());
        f.setSize(size);
        f.setUploadDt(LocalDateTime.now());
        f.setUploadUserId(uis.getId());
        f.setUploadUserName(uis.getName());
        f.setIsShare(false);
        f.setIsShareWithPsw(false);
        f.setSharePsw(null);
        fileMapper.insert(f);
        // 保存文件 C:\_ai_platform\file_upload\a4e170b7a4924092b16a6d6b610f427c.png
        String dest = ConfigService.getValue("file_save_path") + "\\" + fileNameServer + "." + extension;
        // cn.hutool.core.io.FileUtil
        FileUtil.writeFromStream(file.getInputStream(), dest);
        return R.succTip();
    }

3、文件预览

public R preview(Long userId, Long id, String sharePsw) {
        File f = fileMapper.selectById(id);
        if (f == null) {
            return R.fail("文件不存在");
        }
        // 不是自己的文件、未分享
        if (!f.getUploadUserId().equals(userId) && !f.getIsShare()) {
            return R.fail("该文件尚未被分享");
        }
        // 不是自己的文件、分享了、有分享密码、但密码不一致
        if (!f.getUploadUserId().equals(userId)
                && f.getIsShareWithPsw()
                && !f.getSharePsw().equals(sharePsw)) {
            return R.fail("分享密码错误");
        }
        return R.succ().attach(f.getFileNameServer() + "." + f.getExtension());
    }

前端:

function onPreview(row: any) {
    if (row.uploadUserId != uis.value.id && row.isShareWithPsw) {
        dialogPreview.value.open(row)
    } else {
        api.post('file/preview', { id: row.id }).then((attach: any) => {
            preview(uis.value.filePreviewServiceUrl, attach, true)
        })
    }
}
const preview = (filePreviewServiceUrl, fileName, isNewWindow) => {
    debugger
    //http://localhost:9000/ai-platform-file-upload/a4e170b7a4924092b16a6d6b610f427c.png
    const url = 'http://' + window.location.hostname + ':9000/ai-platform-file-upload/' + fileName
    window.open(
      // filePreviewServiceUrl: "http://127.0.0.1:8012/onlinePreview"
        filePreviewServiceUrl + '?url=' + encodeURIComponent(Base64.encode(url)),
        isNewWindow ? '_blank' : '_self'
    )
}

4、文件删除

public R delete(Long userId, Long id) {
        File f = fileMapper.selectById(id);
        if (f == null || !f.getUploadUserId().equals(userId)) {
            return R.fail("文件不存在或该文件是由他人上传的");
        }
        fileMapper.deleteById(f);
        // 删除文件
        String fn = f.getFileNameServer() + "." + f.getExtension();
        // C:\_ai_platform\file_upload\a4e170b7a4924092b16a6d6b610f427c.png
        FileUtil.del(ConfigService.getValue("file_save_path") + "\\" + fn);
        return R.succTip();
    }

5、文件列表

public R list(Long userId, Integer type, String sort, Boolean desc,
                  Integer page, Integer pageSize, String condition) {
        IPage<File> files = fileMapper.list(new Page<>(page, pageSize),
                userId, type, condition, SqlUtil.orderBy(sort, desc));
        // 脱敏
        for (File f : files.getRecords()) {
            f.setFileNameServer(null);
            f.setSharePsw(null);
        }
        return R.succ().attach(files);
    }

具体项目参考:https://gitee.com/zhushangling/hit-ai

目录
相关文章
|
7月前
|
人工智能 缓存 Linux
Confluence PDF导出中文支持
Confluence PDF导出中文支持
|
7月前
|
JavaScript 前端开发
nodejs实现解析chm文件列表,无需转换为PDF文件格式,在线预览chm文件以及目录,不依赖任何网页端插件
nodejs实现解析chm文件列表,无需转换为PDF文件格式,在线预览chm文件以及目录,不依赖任何网页端插件
|
Java 数据安全/隐私保护
在线预览项目kkFileView(二)代码讲解与修改
在线预览项目kkFileView(二)代码讲解与修改
957 0
在线预览项目kkFileView(二)代码讲解与修改
|
2月前
|
开发工具 git
git显示开发日志+WinSW——将.exe文件注册为服务的一个工具+图床PicGo+kubeconfig 多个集群配置 如何切换
git显示开发日志+WinSW——将.exe文件注册为服务的一个工具+图床PicGo+kubeconfig 多个集群配置 如何切换
39 1
|
5月前
【WordPress插件】Media folder汉化版-媒体文件夹-v5.1.2
【WordPress插件】Media folder汉化版-媒体文件夹-v5.1.2
46 0
|
6月前
|
移动开发 JavaScript 前端开发
必知的技术知识:JqueryMedia插件使用,解决在线预览及打开PDF文件
必知的技术知识:JqueryMedia插件使用,解决在线预览及打开PDF文件
|
7月前
|
JavaScript Java
kkFileView在线文件预览与项目集成
kkFileView在线文件预览与项目集成
|
7月前
|
Linux
kkfileview Word文件预览乱码异常问题
kkfileview Word文件预览乱码异常问题
528 0
|
7月前
|
Docker 容器
使用 vitepress + docker + oneDrive 等实现本地知识库 预览+备份
使用 `语雀`、`notion` 等文档知识库,在使用起来比较方便,但是如果需要本地备份,就需要借助一些工具。本文介绍使用 本地预览框架 `vitepress` 和 同步网盘 `oneDrive` 来实现本地知识库 预览+备份。
156 0
基于SpringBoot的文件在线预览神器,支持99%的文件在线预览
kkFileView可以用来搭建文件在线预览服务,在Github上已有5.7k+Star。该项目使用流行的SpringBoot搭建,易上手和部署,基本支持主流办公文档的在线预览,如docx、xlsx、pptx、pdf、txt、zip、图片、视频、音频等等。项目特性可以参考下图。