如何在 javascript 中使用表单数据上传大型 JSON 对象?

Posted

技术标签:

【中文标题】如何在 javascript 中使用表单数据上传大型 JSON 对象?【英文标题】:How upload large JSON object in javascript with form data? 【发布时间】:2016-03-02 05:23:40 【问题描述】:

我正在尝试上传一个非常大的对象,其中包含多个数组,其中包含更多数组。我尝试使用 FormData 上传,但上传是作为字符串接收的,如下所示:

上传代码:

formData.append('large_json', largObj); 

在服务器上收到:

 "bob" : "[[Object object], [Object object]]" 

字符串可能有 1500 万个字符长。我有哪些选择可以将它发送到服务器?

如果有帮助,我正在运行快速服务器。

【问题讨论】:

您查看过npmjs.com/package/multer 吗?对于客户端,类似这样:resumablejs.com 什么是largObj?它是 JSON 对象形式还是字符串表示形式?你是如何在服务器上打印对象/查看接收到的文件的? @WillS largObj,在我上面的示例中,是一个 json 对象。数据通过服务器上的 console.log 打印。但是,如果 json 对象在提交之前进行了字符串化,那么由于 String 值太大,网站会崩溃。 如果是网站崩溃了,你能发布任何与处理文件上传相关的代码(如 Express 处理程序)吗?上传 1500 万个字符的文件(UTF-8 中为 15~60 MB)应该不是问题。此外,您可能想尝试类似@TennysonH 建议的处理表单上传的方法。 node-formidable 似乎也是另一个值得考虑的选择。 @WillS 我不会将它作为文件发送。它是一个字符串。代码的接收端应该不是问题。这是一个简单的 console.log(req.body.key)。 【参考方案1】:

我认为您将对象发送到服务器,而不是其中的信息。

您是否已经尝试将您的object 转换为JSON

formData.append('large_json', JSON.stringify(largObj)); 

【讨论】:

我已经尝试将对象转换为字符串并使用 formData.append 将其作为对象发送。但是,formData.append 无论如何都会将 json 转换为字符串,但它不会完全转换子元素,而只是将它们表示为“[Object object]”。如果我在提交之前显式地对 largeObj 进行字符串化,由于字符串值太大 ~15M 字符长度,结果在发送时会崩溃。

以上是关于如何在 javascript 中使用表单数据上传大型 JSON 对象?的主要内容,如果未能解决你的问题,请参考以下文章

如何上传图像并将其保存在数据库中? [复制]

在javascript-ajax中提交表单时如何显示进度条

使用 Laravel 4 中的表单将 innherHtml 传递的元素上传到数据库

如何使用 javascript 将多个图像上传到 cloudinary 并将 url 发送到另一个数据库

大文件上传解决方案

#yyds干货盘点#今天聊聊大文件上传