如何将多个静态文件捆绑为 zip 存档以供下载

如何解决如何将多个静态文件捆绑为 zip 存档以供下载

My Jekyll 页面旨在为编程书籍的练习提供示例解决方案。 解决方案是将一堆 .cpp 文件(C++ 代码文件)存储在我的 Jekyll 项目中的一个文件夹中,以便我可以在 IDE 中打开同一个文件夹。

我设法为每本书章节自动生成一页,将相关解决方显示代码块列表(每个练习一个)。我通过循环遍历 site.static_files 并通过文件名中的数字识别文件(例如,第 1 章的两个解决方案:01_1_FirstSolution.cpp01_2_SecondSolution.cpp

现在,我还想为包含相关 .cpp 文件的每本书章节提供一个 zip 存档。我不想手动制作 zip 文件,因为那样我将无法再简单地更改其中一个代码文件。理想情况下,我想在循环 site.static_files 并过滤相关文件的同时构建一个 zip 文件

搜索这个时,我主要找到了用于捆绑和压缩资产的速度优化插件。我在 Windows 上运行 Jekyll。

解决方法

如果可以获取文件的内容(fetch 等),您可以使用 JSZip 库将它们打包成 Zip。我不确定这在 jekyll 中是否适合您...但我会尝试这样做。

要尝试示例,只需创建一个 html 文件或 open my example with fetch

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title></title>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/jszip/3.6.0/jszip.min.js" integrity="sha512-uVSVjE7zYsGz4ag0HEzfugJ78oHCI1KhdkivjQro8ABL/PRiEO4ROwvrolYAcZnky0Fl/baWKYilQfWvESliRA==" crossorigin="anonymous" referrerpolicy="no-referrer"></script>
    <script type="module" src="https://cdnjs.cloudflare.com/ajax/libs/FileSaver.js/2.0.0/FileSaver.min.js" integrity="sha512-csNcFYJniKjJxRWRV1R7fvnXrycHP6qDR21mgz1ZP55xY5d+aHLfo9/FcGDQLfn2IfngbAHd8LdfsagcCqgTcQ==" crossorigin="anonymous" referrerpolicy="no-referrer"></script> 
</head>
<body>
<script>
    var zip = new JSZip();
    zip.file("Hello.txt","Hello World\n");
    zip.file("Hello2.txt","Hello2 World\n");
    //var img = zip.folder("images");
    //img.file("smile.gif",imgData,{base64: true});
    zip.generateAsync({type:"blob"})
    .then((content) => {
        // see FileSaver.js
        saveAs(content,"example.zip");
    });
</script>
</body>
</html>
,

Jekyll 是一个主要的静态网站构建器,因此在使用 Jekyll 构建之前运行程序或 shell 脚本并将它们输出到您希望输出到的 site.static_files 位置可能是理想的选择。

您可以在运行 Jekyll 之前使用脚本来压缩文件,然后运行 ​​Jekyll 构建过程。

您还可以编写 Generator plugins 来实现类似的结果,使用插件或 Ruby 的 system 命令将脚本作为构建的一部分运行。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?