如何解决如何将多个静态文件捆绑为 zip 存档以供下载
My Jekyll 页面旨在为编程书籍的练习提供示例解决方案。 解决方案是将一堆 .cpp 文件(C++ 代码文件)存储在我的 Jekyll 项目中的一个文件夹中,以便我可以在 IDE 中打开同一个文件夹。
我设法为每本书章节自动生成一页,将相关解决方案显示为代码块列表(每个练习一个)。我通过循环遍历 site.static_files
并通过文件名中的数字识别文件(例如,第 1 章的两个解决方案:01_1_FirstSolution.cpp
、01_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 举报,一经查实,本站将立刻删除。