Ruby on rails 如何使用节点将多部分表单数据发布到rails后端?
节点使用如下代码提交多部分表单数据:Ruby on rails 如何使用节点将多部分表单数据发布到rails后端?,ruby-on-rails,node.js,Ruby On Rails,Node.js,节点使用如下代码提交多部分表单数据: var form = new FormData(); form.append(project.name+'.zip', fs.createReadStream("/"+project.name+'.zip')); form.submit({ host: 'http://host.mysite.dev', path: '/api/v1/prototypes', headers: { 'Authentication': 's
var form = new FormData();
form.append(project.name+'.zip', fs.createReadStream("/"+project.name+'.zip'));
form.submit({
host: 'http://host.mysite.dev',
path: '/api/v1/prototypes',
headers: {
'Authentication': 'secret'
}
}, function(err, res) {
if(err) console.log("ERR: ", err)
else console.log("RES: ", res)
console.log(res.statusCode);
});
我的后端希望请求看起来像邮递员测试的那样
------WebKitFormBoundarywo69VE86H8vMc9ah
Content-Disposition: form-data; name="attachment"; filename="basic.zip"
Content-Type: application/zip
------WebKitFormBoundarywo69VE86H8vMc9ah--
相反,我的请求看起来像是rails无法解释的疯狂胡言乱语。我不知道如何使用node发出普通的多部分表单请求
{
"attachment":{
"_overheadLength":157,
"_valueLength":0,
"_lengthRetrievers":[
null
],
"writable":false,
"readable":true,
"dataSize":0,
"maxDataSize":2097152,
"pauseStreams":true,
"_released":false,
"_streams":[
"----------------------------860185489573893683941879\r\nContent-Disposition: form-data; name=\"app.zip\"; filename=\"app.zip\"\r\nContent-Type: application-zip\r\n\r\n",
{
"source":{
"_readableState":{
"objectMode":false,
"highWaterMark":65536,
"buffer":[
{
"type":"Buffer",
"data":[
80,
181
]
}
],
"length":65536,
"pipes":null,
"pipesCount":0,
"flowing":false,
"ended":false,
"endEmitted":false,
"reading":false,
"sync":false,
"needReadable":false,
"emittedReadable":true,
"readableListening":false,
"defaultEncoding":"utf8",
"ranOut":false,
"awaitDrain":0,
"readingMore":false,
"decoder":null,
"encoding":null
},
"readable":true,
"domain":null,
"_events":{
},
"_eventsCount":3,
"path":"/Users/guest/Library/Application Support/foundation-apps-template/app.zip",
"fd":299,
"flags":"r",
"mode":438,
"autoClose":true
},
"dataSize":0,
"maxDataSize":null,
"pauseStream":true,
"_maxDataSizeExceeded":false,
"_released":false,
"_bufferedEvents":[
],
"_events":{
},
"_eventsCount":1
},
null
],
"_currentStream":null,
"_boundary":"--------------------------860185489573893683941879"
}
}
我也不知道该怎么办A.解析这个我不知道怎么做的疯狂数据包。或者B.让它看起来像一个正常的多部分表单提交。我已经被这个问题困扰了3个工作日,我尝试了很多方法,但都没有成功。我开始拼命想弄清楚这件事。我准备放弃这一切,开始从头开始组装我的数据包——但也不知道该怎么做。但在这一点上,要想让这些废话发挥作用再难不过了。你确定可以将任意文件流转储到append中吗?文档暗示您可以,但您在这里看到的是原始JavaScript对象。。。但这里有一个链接指向他们的多部分表单数据示例。他们像我一样将任意文件流转储到append中。不幸的是,这些例子中没有一个能解析您发送回文件中的请求。我只是看了一下,它应该可以工作,但您在这里看到的是被视为流内部的哑JavaScript对象,而不是正确编码的流数据。从他们的文档中:form.append'my_file',fs.createReadStream'/foo/bar.jpg';。当它到达rails后端后,是否有可能将其转换为文件,或者是由于该请求的格式不正确、编码不正确(如您所说)而无法实现?如果无法在后端解决此问题。。。。你认为从头组装我的包体就可以解决我的问题吗?我已经尝试了很多节点包,它们似乎都像我在这里展示的那样流式处理。。。我放弃了使用node发布多部分/表单数据。我不情愿地输入了一个file类型的字段。使用该输入元素进行提交非常有效。很明显,我没有放弃:P,但我不会再花8个小时,直到我从创建表单数据模块的人那里得到信息!归根结底,很明显,需要通过网络发送文件对象,而不是缓冲区。不知道他们为什么/如何将其实现为流。文件应包括如何接收数据。