在云函数中解析表单数据 zip 文件



我正在将FormData()发送到JavaScript前端中具有类似内容的云函数。

//Frontend Angular
const formData = mew FormData();
formData.append('file1', zipFile1);
formData.append('file2', zipFile2);
formData.append('name', 'MyFiles');
this.http.post(urlAPI, formData) //angularJS

//Cloud Function
function main(param) {
console.log(param);
}

param上的控制台日志显示content-typemultipart/form-data在标头中。 还有一个标记为__ow_body的属性。此值是一个非常长的字符串和数字。我不确定这是什么,但我假设这是我以流/序列化格式发送的文件。

{
__ow_body: 'hf381fh891hv831h93n19384v938v892vn98vn2890vn29n9vn9892vn948vn2893vn2985hv98...'
}

我想确认这是否是流数据,如果是,我该如何解析它?

我需要将此文件(一个包含图像的 zip 文件(发送到我正在使用的 API。在本文档 API 中,示例显示了在本地文件系统中发送文件,例如

someApiFunction('./myImgs.zip').then(...);

问题在于我通过http网络协议发送我的zip文件,我认为格式与在本地文件系统/机器中读取文件的示例非常不同。如何反序列化/或解析我的文件,以便将其识别为包含图像的zip文件?

我尝试使用fs.createReadStream但它似乎没有解析它。它只会创建一个更有条理的对象,但在该对象中,我看不到我的formData及其键,例如file1file2name

我需要先在某个地方写入此文件吗?

即使可能性较小,您也可以尝试更改发布 formData 的方式。我找到了一个非常好的文档,关于如何将formData与Angular一起使用。正如那里所说,您可以尝试使用这样的东西来发布:

this.httpClient.post<any>(this.SERVER_URL, formData).subscribe(
(res) => console.log(res),
(err) => console.log(err)
); 

这不太可能起作用,但您可以试一试。

可以肯定的是,由于Cloud Functions预处理某些请求的方式,您可以预期某些库不起作用,我认为这就是您的确切情况。

正如云函数文档中所述,您需要使用请求的 rawBody 属性和"bus-boy"库来处理多部分/表单数据。

下面是处理此类请求的代码示例之一。

相关内容

  • 没有找到相关文章

最新更新