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

目录
相关文章
|
2月前
|
JavaScript 前端开发
nodejs实现解析chm文件列表,无需转换为PDF文件格式,在线预览chm文件以及目录,不依赖任何网页端插件
nodejs实现解析chm文件列表,无需转换为PDF文件格式,在线预览chm文件以及目录,不依赖任何网页端插件
|
API
【工具推荐】 Obsidian 插件 Obsidian to Flomo 一键同步内容到 Flomo 插件
Obsidian to Flomo 是一款可以一键发送内容到 Flomo 的Obsidian 插件。
699 0
|
Java 数据安全/隐私保护
在线预览项目kkFileView(二)代码讲解与修改
在线预览项目kkFileView(二)代码讲解与修改
836 0
在线预览项目kkFileView(二)代码讲解与修改
|
7天前
|
移动开发 JavaScript 前端开发
必知的技术知识:JqueryMedia插件使用,解决在线预览及打开PDF文件
必知的技术知识:JqueryMedia插件使用,解决在线预览及打开PDF文件
|
2月前
|
JavaScript Java
kkFileView在线文件预览与项目集成
kkFileView在线文件预览与项目集成
|
2月前
|
Linux
kkfileview Word文件预览乱码异常问题
kkfileview Word文件预览乱码异常问题
150 0
基于SpringBoot的文件在线预览神器,支持99%的文件在线预览
kkFileView可以用来搭建文件在线预览服务,在Github上已有5.7k+Star。该项目使用流行的SpringBoot搭建,易上手和部署,基本支持主流办公文档的在线预览,如docx、xlsx、pptx、pdf、txt、zip、图片、视频、音频等等。项目特性可以参考下图。
使用APICloud实现文档下载和预览功能
使用 APICloud 开发 app 时,可以使用 api.download 方法实现下载;预览文档可以使用 superFile 模块。superFile 模块封装了基于腾讯浏览服务 TBS,使用 X5Webkit 内核,实现文件的展示功能,支持多种文件格式(PDF、Word、Execl、TXT、PPT)。
447 0
APICloud 实现文档下载和预览功能
文档下载是很多app,尤其是企业应用中常用的功能。使用APICloud开发app时,可以使用api.download方法实现下载;预览文档可以使用superFile 模块。superFile 模块封装了基于腾讯浏览服务TBS,使用X5Webkit内核,实现文件的展示功能,支持多种文件格式(PDF、Word、Execl、TXT、PPT)。
277 0
APICloud 实现文档下载和预览功能
|
JavaScript 程序员 API
通过nodejs实现网易云音乐批量下载或单曲下载
从豆瓣转到网易云后,发现了不少好听的歌曲,然鹅..当我想把这些歌拿下来扔车上听的时候发现竟然不允许下载..能听不能下?这不科学,作为一名程序猿,必然要迎难而上啊.
通过nodejs实现网易云音乐批量下载或单曲下载

热门文章

最新文章