将 zip 文件上传到服务以供用户下载

Upload zip files to service for user download

我有一个 express (node.js) 应用程序,它可以为用户创建 mp3 文件并将它们存储在服务器上的一个文件夹中。

服务器的文件结构如下所示:

data/
  id#/
    song1.mp3
    song2.mp3
    song3.mp3
  id#/
    song1.mp3
    song2.mp3
    song3.mp3
  ...

我想为文件夹创建 zip 文件和下载链接,并通过电子邮件向用户发送他们的 zip 文件。每个文件夹都使用 id# 命名并对应于一个用户。

我想使用外部服务(例如s3)来存储和处理文件的下载。

我如何压缩文件并将它们发送到服务并创建下载链接?我应该查看哪些服务?

你可以使用 child_process 模块在后台 运行 一个 zip 命令(这个例子是说如果你在 Linux,你可以修改它以适应windows)

这只是处理压缩过程,然后您可以使用 link 响应以下载文件:

var exec = require('child_process').exec;

var currentWorkingDirectory = '/data', // Folder that contains the sub folders of id#/
    folderToZip             = 'id123123',  // Subfolder name id#, e.g. id123123
    tmpFolderForZips        = '/tmp/', // Folder to store the zip files in
    execString              = "zip -r " + tmpFolderForZips + folderToZip + ".zip " + folderToZip; // Tidy string to put it all together
console.log(execString);

var child = exec(execString, { cwd: currentWorkingDirectory });

child.on('error', function(err) {
    console.log(err);
})

child.on('close', function() {
    // respond with download link to zip file
    console.log('Done Zipping');
});

确保你apt-get install zip