如何在AWS Lambda中编写从CURL上传接收的二进制ZIP文件?

时间:2017-10-12 00:12:01

标签: node.js amazon-web-services file-upload lambda serverless-framework

我想让我的代码保存通过CURL上传的二进制数据 这是我使用的CURL命令:curl --header "Content-Type:application/octet-stream" --trace-ascii debugdump.txt --data-binary @test-files/small-test.zip http://localhost:8000/chrome。 在Node JS(接收方)上有一个脚本,它接受AWS Lambda事件对象并将event.body属性带入此函数:

handler.js

export default (async function run(event, context, callback) {

    //here event.body keeps the content of small-test.zip
    //logged content is encoded with \u0000 signs- take a look at second screenshot
    console.log(event);
    writeToDiskAndUnpackDocument(event.body);
}

function writeToDiskAndUnpackDocument(binaryFileContents) {
    //here I get binary content - take a look at second screenshot
    //logged content looks the same as displayed by linux command "cat small-test.zip"
    console.log(binaryFileContents); 
    //this command writes event.body to disk, but result file is not the same as that in curl command
    fs.writeFile('/tmp/document.zip', binaryFileContents,'binary');
}

document.zip文件夹中的tmp域,当我发出cat document.zip时,它看起来与输入文件test-files/small-test.zip不同。我不知道为什么会有所不同。这是截图,顶部是原始文件,底部是接收文件。 comparison of sent and received file

我正在使用无服务器离线来开发解决方案。 如何在Lambdas tmp(首先是我自己的linux笔记本电脑)中正确保存这个ZIP文件?

事件对象和writeToDiskAndUnpackDocument参数中的二进制数据的比较:

differences of binary content

1 个答案:

答案 0 :(得分:1)

在处理无服务器时,我会避免处理本地文件系统,为什么不使用S3下载二进制文件?

如果您仍想下载二进制文件并将其传输到文件系统,

request
  .get('http://example.com/doodle.png')
  .on('error', function(err) {
    console.log(err)
  })
  .pipe(fs.createWriteStream('/tmp/doodle.png'))

它可以下载并将其下载到文件系统。

<强>参考:

https://github.com/request/request

希望它有所帮助。