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

标签 javascript angular google-cloud-functions serverless ibm-cloud-functions

我正在将 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 上的控制台日志显示 header 中的 content-typemultipart/form-data。 还有一个标记为 __ow_body 的属性。该值是一个很长的字符和数字字符串。我不确定这是什么,但我假设它是我以流/序列化格式发送的文件。

{
  __ow_body: 'hf381fh891hv831h93n19384v938v892vn98vn2890vn29n9vn9892vn948vn2893vn2985hv98...'
}

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

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

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

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

我尝试使用fs.createReadStream但它似乎没有解析它。它只会创建一个更加结构化的对象,但在该对象中,我看不到我的 formData 及其键,例如 file1 file2名称

我需要先将此文件写入某个位置吗?

最佳答案

即使可能性较小,您也可以尝试稍微改变发布 formData 的方式。我找到了一个关于如何使用 formData with Angular 的非常好的文档。正如那里所述,您可以尝试使用类似这样的内容来发布:

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

这不太可能起作用,但你可以尝试一下。

可以肯定的是,由于 Cloud Functions pre-processes some requests 的方式,您可以预期某些库无法工作,我认为这正是您的情况。

正如云功能中所述 documentation ,您需要使用请求的 rawBody 属性和“bus-boy”库来处理 multipart/form-data。

这是 code example 之一用于处理此类请求。

关于javascript - 在云函数中解析表单数据zip文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58279363/

相关文章:

javascript - 查询浏览器插件是否存在/版本/等

javascript - Angular 2注入(inject)全局依赖

javascript - Angular 2路由器配置延迟加载模块

javascript - 如何使用 Cloud Functions 从实时数据库中读取值?

python - 谷歌云数据存储: Exporting entities that match a certain query

javascript - 使用 nvm 使 node.js 文件可执行的最佳方法

javascript - 在 Angular7 中对 typescript 中的字母数字数组进行排序

javascript - Cesium:选择实体并检索 WMS 的信息

angular - 如何在angular2中使用指令

javascript - 云功能中的 firebase 分布式计数器扩展