在 Serverless Offline 中保存从多部分表单接收的视频文件

Save video file received from multipart form in Serverless Offline

我有一个网站 运行 Angular4,其中包含使用 ng2-file-upload 上传数据的简单表单。我将这些文件发送到一个基于 Node.js 的无服务器离线服务器,我的目的是简单地将那些从表单收到的文件写入磁盘。

我尝试了很多不同的方式,最后我发现 this right here 可以将事件的形式解析为 json。结果 json 在其中一个包含视频数据的字段中包含一个缓冲区,如下所示:

{ Host: 'localhost:3000',
  'User-Agent': 'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:59.0) Gecko/20100101 Firefox/59.0',
  Accept: '*/*',
  'Accept-Language': 'en-US,en;q=0.5',
  'Accept-Encoding': 'gzip, deflate',
  Referer: 'http://localhost:4200/myupload',
  'Content-Length': 2391623,
  'Content-Type': 'multipart/form-data; boundary=---------------------------2125290100942661667805976894',
  Origin: 'http://localhost:4200',
  Connection: 'keep-alive' }
{ file:
   { type: 'file',
     filename: 'y9K18CGEeiI.webm',
     contentType: 'video/webm',
     content: <Buffer 1a 45 e3 01 00 00 00 00 00 00 1f 42 fd fd 01 42 fd fd 01 42 fd 04 42 fd 08 42 fd fd 77 65 62 6d 42 fd fd 02 42 fd fd 02 18 53 fd 67 01 00 00 00 00 14 ... > } }

现在我要做的是使用 fs:

将文件保存在缓冲区中
module.exports.handler = (event, context, callback) => {
    let data = multipart.parse(event, false);

    fs.writeFile('meme.webm', data.file.content, 'binary', function(err) {
        if(err) { 
          console.log(err);
        } else {  
          console.log('saved!');
        }
    }); 

    // etc ...
};

文件以正确大小 (1.3MB) 保存到磁盘,与原始文件相同。不幸的是,我似乎无法在另一侧打开它,我认为这要么是因为其他编码,要么是因为我将它写入磁盘的方式。有什么想法吗?

遇到此问题的任何人,请查看此 issue right here。这是无服务器离线转换文件数据的问题,除了应用 fork 之外似乎没有什么可以做的。