如何使用curl CLI将文件上传到我的ruby on rails app?

Nul*_*uli 9 curl file-upload ruby-on-rails file

在网络方面,我有两个字段:名称和文档.Document是一个文件字段,name就是用户想要在应用程序中调用该文件的名称.

这是我尝试过的:

curl -F "media[document]=@a.png" -F "media[name]=api" "http://example.com/medias/create.xml?api_key=123"
Run Code Online (Sandbox Code Playgroud)

但我得到一个InvalidAuthenticityToken错误.仅当我尝试上载文件/制作媒体对象时才会出现此错误.其他API/xml命令有效(不涉及文件的命令)

使用cURL上传文件的正确方法是什么?

编辑:在上面的curl命令中添加-H"Content-Type:application/xml"使服务器生成此错误:

/!\ FAILSAFE /!\  Tue Jan 24 08:45:03 -0500 2012
  Status: 500 Internal Server Error
  #<REXML::ParseException: malformed XML: missing tag start
Line: 
Position: 
Last 80 unconsumed characters:
<:??OH???H? ???g??yx~t????op?.$?????P&W ??"?
Run Code Online (Sandbox Code Playgroud)

通常使用-d参数提供XML.但我不认为文件可以包含在xml中?也许他们可以?IDK的.

Cor*_*ren 9

如果你想创建XML文件,你应该格式化你的XML使用数据,无论是Base64编码和/或CDATA,这取决于你的需要.一旦你有一个格式正确的xml文件,你只需要用curl发送它.

如果您只想上传文件,则无需使用xml界面.你可以打电话:

curl -F "media[document]=@./a.png;type=image/png" -F "media[name]=api" "http://example.com/medias/
Run Code Online (Sandbox Code Playgroud)

对于你的身份验证问题,如果你仍然在这个网址上(我没有在新的rails 3.2.1新应用程序上遇到它),你可以使用常规浏览器访问它,获取cookie信息并使用curl发送它.这意味着您将添加到您的命令:

--cookie "csrf-param=authenticity_token" --cookie "csrf-value=XXXXXXX"
Run Code Online (Sandbox Code Playgroud)

或者使用方便的脚本将所有当前的Firefox cookie从主机发送到curl.