Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/57.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 如何使用节点将多部分表单数据发布到rails后端?_Ruby On Rails_Node.js - Fatal编程技术网

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个小时,直到我从创建表单数据模块的人那里得到信息!归根结底,很明显,需要通过网络发送文件对象,而不是缓冲区。不知道他们为什么/如何将其实现为流。文件应包括如何接收数据。