睿阳知识库 睿阳知识库
首页
  • npm库配置
  • PC端

    • npm常用命令
    • vue问题记录
    • SEO基础知识及优化
    • 禁止别人调试我的前端页面代码
  • 移动端

    • 小程序
    • Risun.js使用说明
  • Java

    • Maven库配置
    • RSP开发框架
    • RSP框架插件
  • .NET

    • Nuget库配置
  • Python

    • Pypi库配置
  • 常见问题

    • Word转Pdf字体错乱
    • 使用Jacob进行Word导出PDF
  • 自动部署
  • 前端带路径
  • Linux

    • 应用部署
  • Windows

    • 应用部署
  • 视频监控
  • MySQL系列~
  • 应用高可用
  • 静态代码扫描
  • OpenSSH版本升级
  • 区块链~
  • 软件过程文档目录
  • 著作权申请须知及申报示例
  • 项目申报技巧
  • 项目竣工资料清单
  • 科技项目申报流程及注意事项
  • 初级职称申报
  • 产品需求文档基础知识
  • 产品经理需了解的技术知识
  • 墨刀原型设计指南
  • 文档规范
  • 文档规范
  • 投标工作总结(一)
  • 科技项目申报心得体会
  • 数字孪生
  • AI
  • RSP基础平台
  • RMCloud
  • 区块链
  • 网络态势感知
  • 国产化
  • 数据湖
  • 贡献度
  • 文档编写说明
  • Markdown教程
工作链接
首页
  • npm库配置
  • PC端

    • npm常用命令
    • vue问题记录
    • SEO基础知识及优化
    • 禁止别人调试我的前端页面代码
  • 移动端

    • 小程序
    • Risun.js使用说明
  • Java

    • Maven库配置
    • RSP开发框架
    • RSP框架插件
  • .NET

    • Nuget库配置
  • Python

    • Pypi库配置
  • 常见问题

    • Word转Pdf字体错乱
    • 使用Jacob进行Word导出PDF
  • 自动部署
  • 前端带路径
  • Linux

    • 应用部署
  • Windows

    • 应用部署
  • 视频监控
  • MySQL系列~
  • 应用高可用
  • 静态代码扫描
  • OpenSSH版本升级
  • 区块链~
  • 软件过程文档目录
  • 著作权申请须知及申报示例
  • 项目申报技巧
  • 项目竣工资料清单
  • 科技项目申报流程及注意事项
  • 初级职称申报
  • 产品需求文档基础知识
  • 产品经理需了解的技术知识
  • 墨刀原型设计指南
  • 文档规范
  • 文档规范
  • 投标工作总结(一)
  • 科技项目申报心得体会
  • 数字孪生
  • AI
  • RSP基础平台
  • RMCloud
  • 区块链
  • 网络态势感知
  • 国产化
  • 数据湖
  • 贡献度
  • 文档编写说明
  • Markdown教程
工作链接
  • Java

    • Maven库配置
    • RSP开发框架
    • RSP框架插件
    • 框架插件

      • 工作流
      • Word、PDF、Excel增强
      • 消息提醒
      • 资源打包成ZIP下载
        • 一. 后端
          • 1. 新增SysDownload.java
          • 2. 新增ZipDownloadUtil.java
          • 3. 修改CommonController.java
        • 二. 前端
        • 三. 使用说明
      • 区分多个项目Redis缓存
      • 留言评论
      • 内部消息队列
      • 文件预览增强
      • 在线Excel报表设计
      • 自定义高级查询
  • .NET

  • Python

  • 常见问题

  • 后端
  • Java
  • 框架插件
孙超
2022-12-14
目录

资源打包成ZIP下载

框架添加了将资源打包成ZIP并下载的功能,主版本RSP框架已包含此功能,老版本框架若要使用,请进行如下操作,集成功能:

# 一. 后端

# 1. 新增SysDownload.java

在[项目]-common 模块中,com.risun.common.core.domain.entity 包下,创建 SysDownload.java,内容如下

package com.risun.common.core.domain.entity;

import javax.validation.constraints.NotBlank;
import com.risun.common.core.domain.BaseEntity;

/**
 * 通用资源下载请求对象
 * 
 * @author dante
 */
public class SysDownload extends BaseEntity {

    private static final long serialVersionUID = 1L;
    
    /**
    * 本地资源(文件的路径)
    */
    @NotBlank(message = "本地资源不能为空")
    private String resource;
    
    /**
    * 下载文件名(名称+后缀)
    */
    @NotBlank(message = "下载文件名不能为空")
    private String fileName;

    public String getResource() {
      return resource;
    }

    public void setResource(String resource) {
      this.resource = resource;
    }

    public String getFileName() {
      return fileName;
    }

    public void setFileName(String fileName) {
      this.fileName = fileName;
    }

    @Override
    public String toString() {
        return "SysDownload [resource=" + resource + ", fileName=" + fileName + "]";
    }
}

# 2. 新增ZipDownloadUtil.java

在[项目]-common 模块中,com.risun.common.utils 包下,创建 ZipDownloadUtil.java,内容如下

package com.risun.common.utils;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import com.risun.common.constant.Constants;
import cn.hutool.core.io.FileUtil;
import cn.hutool.core.util.ZipUtil;
import lombok.extern.slf4j.Slf4j;

/**
 * 资源打包为 ZIP 并下载
 * 
 * @author dante
 *
 */
@Slf4j
public class ZipDownloadUtil {

    public static void zip(String baseUrl, String resource, OutputStream outputStream) {
        String[] resourceArr = resource.split(",");
        int len = resourceArr.length;
        String[] fileNameArr = new String[len];
        InputStream[] insArr = new FileInputStream[len];

        for (int i = 0; i < len; i++) {
            fileNameArr[i] = FileUtil.getName(resourceArr[i]);
            insArr[i] = getFileInputStream(baseUrl + StringUtils.substringAfter(resourceArr[i], Constants.RESOURCE_PREFIX));
        }
        ZipUtil.zip(outputStream, fileNameArr, insArr);
    }

    private static FileInputStream getFileInputStream(String filePath) {
        FileInputStream fis = null;
        try {
            File file = new File(filePath);
            if (!file.exists()) {
                throw new FileNotFoundException(filePath);
            }
            fis = new FileInputStream(file);
        } catch (IOException e) {
            log.error(e.getMessage(), e);
        }
        return fis;
    }
}

# 3. 修改CommonController.java

CommonController.java 位于[项目]-admin 模块,com.risun.web.controller.common 包下。添加如下内容:

/**
 * 本地资源打包成ZIP并下载
 */
@PostMapping("/download/resource2zip")
public void resource2ZipDownload(@Validated SysDownload sysDownload, HttpServletRequest request, HttpServletResponse response) {
    try {
        String resource = sysDownload.getResource();
        String downloadName = sysDownload.getFileName();
        if (!FileUtils.checkAllowDownload(downloadName)) {
            throw new Exception(StringUtils.format("资源文件({})非法,不允许下载。 ", downloadName));
        }
        // 本地资源路径
        String localPath = RisunConfig.getProfile();
        response.setContentType(MediaType.APPLICATION_OCTET_STREAM_VALUE);
        FileUtils.setAttachmentResponseHeader(response, downloadName);
        ZipDownloadUtil.zip(localPath, resource, response.getOutputStream());
    } catch (Exception e) {
        log.error("下载文件失败", e);
    }
}

# 二. 前端

修改 download.js(位于 [项目]-ui/src/plugins 下),添加如下内容:

import { param } from "@/utils/index"

resource2zip(query) {
  var url = baseURL + "/common/download/resource2zip"
  axios({
    method: 'post',
    url: url,
    responseType: 'blob',
    headers: { 
      'Content-Type': 'application/x-www-form-urlencoded',
      'Authorization': 'Bearer ' + getToken() 
    },
    data: param(query)
  }).then(async (res) => {
    const isLogin = await blobValidate(res.data);
    if (isLogin) {
      const blob = new Blob([res.data])
      this.saveAs(blob, decodeURI(res.headers['download-filename']))
    } else {
      this.printErrMsg(res.data);
    }
  })
},

# 三. 使用说明

/**
 * resource: 要被打包的文件路径,用逗号分隔
 * fileName: 打包后zip的名称
 */
this.$download.resource2zip({ resource: "filePath", fileName: "xx.zip"})
消息提醒
区分多个项目Redis缓存

← 消息提醒 区分多个项目Redis缓存→

最近更新
01
vue问题记录
10-11
02
RSP进度
10-09
03
贡献度
09-28
更多文章>
Copyright © 2014-2025 甘肃睿阳科技有限公司 陇ICP备15001783-1号
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式