Ruby on rails 如何防止Rails处理大型XML Post

Ruby on rails 如何防止Rails处理大型XML Post,ruby-on-rails,xml,Ruby On Rails,Xml,在我们的rails应用程序中,我们有许多做常规webapp操作的操作。但是,我们只有一个操作可以接受一个大的XML文件。我希望防止rails将XML解析为参数。相反,我希望能够获取URL参数(/documents/{id}/action),然后将xml文件写入特定目录。如何防止Rails处理它 我将如何定义处理此问题的操作 def handle_xml # what to put here end 上传是使用内容类型:application/xml完成的。它是单个文件,而不是多部分表单的

在我们的rails应用程序中,我们有许多做常规webapp操作的操作。但是,我们只有一个操作可以接受一个大的XML文件。我希望防止rails将XML解析为参数。相反,我希望能够获取URL参数(/documents/{id}/action),然后将xml文件写入特定目录。如何防止Rails处理它

我将如何定义处理此问题的操作

def handle_xml
   # what to put here
end
上传是使用内容类型:application/xml完成的。它是单个文件,而不是多部分表单的一部分。示例curl语句是:

curl-H 'Accept: application/xml' -H 'Content-Type: application/xml' -X POST -d '<?xml version="1.0" encoding="UTF-8"?><test></test>' http://0.0.0.0:3000/controller/handle_xml
curl-H'Accept:application/xml'-H'内容类型:application/xml'-X POST-d''http://0.0.0.0:3000/controller/handle_xml

操作应将其作为文件接收(通过多部分表单上载的方式),然后将其作为临时文件存储。

您是否尝试发送xml文件,并在http uri请求中包含一个变量?大概是

@xml_file = xml..xml...xml...

parameters => {
  query => {
    xml_file => @xml_file
  }
}
Httparty.post("url", parameters)
然后在您的方法中:

def handle_xml
  @xml_file = params[:xml_file]
  @xml_file.save (or whatever you want here..)
end

如果要防止rails自动将XML数据解析为参数散列,则必须用自己的自定义版本替换ParamSpaser中间件

当文件发布到rails时,如果数据格式是xml,ParamSpaser中间件将修改请求参数并将其转换为哈希。您可以在rails中的文件中找到详细信息

这里有一个类似于你所问的问题


不幸的是,作为一个新用户,我不能发布更多的链接,但是你应该用“使用定制机架中间件清理post参数”搜索google,以获得关于编写定制机架中间件的更多详细信息。

我最近也遇到了这个问题。但是,我的应用程序是在一个内部应用程序中,我可以完全控制Rails应用程序和连接到它的客户端


在我的应用程序中,客户端向Rails应用程序发布一个大型XML数据集。我想在延迟作业(resque)中处理XML文档。我的解决方法是让客户端使用一种替代的内容类型。我使用了application/octet流。这会阻止Rails解析POST数据。数据可在
request.raw\u post

中找到,如果文件是以内容类型接收的,该怎么办:应用程序/xml有没有办法阻止它处理它?这意味着它不是由多个部分组成的表单的一部分。如果该文件是作为内容类型接收的:application/xml,有没有办法阻止它处理它?这意味着它不是多部分表单的一部分。好问题。。。难道没有办法愚弄程序,说它不是xml。。。我必须研究一下。你可以从\u xml(@xml\u file)中做一个output=Hash,然后返回到\u-to\u-xml=output.to\u-xml这看起来很好,我可以看看如何阻止它解析它。谢谢看起来是另一个很好的方法,我们只是没有改变上传内容类型的选项。