6

我有一个内置于 ruby​​ on rails 的应用程序。我需要向该应用程序发布 curl 请求以从本地计算机上传图像。在我的 ruby​​ on rails 应用程序中,我使用回形针进行图像上传。

现在这个 curl 请求工作得很好,因为这个 curl 请求没有上传图片:

  curl -v -H   "Accept: application/json" -H "Content-type: application/json" -X PUT -d '{"user":{"first_name":"John","last_name":"Smith"},"token":"api"}'  http://localhost:3000/users/8

现在我想从我的本地机器上传一张图片。

添加“display_photo”:@test.jpg 不起作用:这是我正在尝试的:(但它不起作用。)

  curl -v -H  -F "Accept: application/json" -H "Content-type: application/json" -X PUT -d '{"user":{"first_name":"firstname","last_name":"lastname","display_photo":@test.jpg},"token":"api"}'  http://localhost:3000/users/8

所以问题是如何从 curl 请求上传图像/数据文件/视频

编辑

这是我的控制器:

   def update
    @user = User.find(params[:id])

    respond_to do |format|
      if @user.update_attributes(params[:user])
        format.html {  redirect_to(@user, :notice => 'User was successfully updated.') }
        format.json  { render :file => "users/json/show.json.erb", :content_type => 'application/json' }
      else
        format.html { render :action => "edit" }
        format.json  { 
          @errors_object = @user
          render :file => "shared/json/errors.json.erb", :content_type => 'application/json' }
      end
    end
  end

在我的模型中:

class User < ActiveRecord::Base
    has_attached_file :display_photo, :styles => { :medium => "200x200#", :thumb => "100x100#", :very_small=>"24x24#" }
end
4

3 回答 3

14

您通常会上传这样的文件:

curl -i -F filedata=@upload.txt http://localhost:5000/

这样做会模仿您通过网络浏览器文件上传的行为。

如果您查看 rails 对此的响应,它是通过application/octet-stream可以作为上传文件正确处理的发送的。据我所知,用 json 请求是不可能做到这一点的:

Started POST "/" for 127.0.0.1 at 2012-07-10 09:40:59 +0200
Processing by HomeController#index as */*
  Parameters: {"filedata"=>#<ActionDispatch::Http::UploadedFile:0x007f82d59a3580 @original_filename="upload.txt", @content_type="application/octet-stream", @headers="Content-Disposition: form-data; name=\"filedata\"; filename=\"upload.txt\"\r\nContent-Type: application/octet-stream\r\n", @tempfile=#<File:/var/folders/f_/wjnrg7cd3d9f1tpy3k5fhrwm0000gn/T/RackMultipart20120710-30471-1t9abns>>}
于 2012-07-10T07:42:32.580 回答
6

我遇到了同样的问题,我用以下方法解决了它,绕过了 JSON 请求:

curl -v -H 'Content-Type: multipart/form-data' -H 'Accept: application/json' -H 'x-api-key:myapikey' -F "user[first_name]=firstname" -F "user[last_name]=lastname" -F "user[display_photo]=@test.jpg" http://localhost:3000/users/8 
于 2013-05-15T15:06:46.163 回答
0
curl -v -include --form "<param>=@/<root>/image_name.png" http://<your url>
**<param>**: The image parameter of the url;
**<root>**: You can use pwd get image root;
**<your url>**: Post url;
于 2015-12-08T06:47:47.837 回答