我想让我的代码保存通过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
属性带入此函数:
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
不同。我不知道为什么会有所不同。这是截图,顶部是原始文件,底部是接收文件。
我正在使用无服务器离线来开发解决方案。 如何在Lambdas tmp(首先是我自己的linux笔记本电脑)中正确保存这个ZIP文件?
writeToDiskAndUnpackDocument
参数中的二进制数据的比较:答案 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
希望它有所帮助。