Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Curl request to upload image from local machine to ruby on rails application

I have an application built in ruby on rails. I need to post curl request to that application to upload images from local machine. In my ruby on rails application I am using paperclip for image uploader.

Now this curl request is working perfectly fine as there is no upload image for this curl request:

  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

Now I want to upload an image from my localmachine.

Adding "display_photo":@test.jpg is not working: This is what I was trying: (But its not working.)

  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

So the question is how to upload images/data files/ videos from curl request

EDIT

This is my controller:

   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

In my model:

class User < ActiveRecord::Base
    has_attached_file :display_photo, :styles => { :medium => "200x200#", :thumb => "100x100#", :very_small=>"24x24#" }
end
like image 983
Mohit Jain Avatar asked Jul 09 '12 19:07

Mohit Jain


1 Answers

you would normally upload a file like this:

curl -i -F [email protected] http://localhost:5000/

doing so mimics the behavior that you would have through a webbrowsers file upload.

if you look at the rails response for this, it's sent via application/octet-stream that can be handled properly as an uploaded file. as far as i know it's not possible to do this with a json request:

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>>}
like image 183
phoet Avatar answered Sep 25 '22 06:09

phoet