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

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