如何在 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 对象?的主要内容,如果未能解决你的问题,请参考以下文章
使用 Laravel 4 中的表单将 innherHtml 传递的元素上传到数据库