2011-01-30 17 views
6

मेरे पास जावा में बाइट सरणी के रूप में एक छवि है। मैं उस छवि को मेरी रूबी पर रेल ऐप पर अपलोड करने की कोशिश कर रहा हूं, जो पेपरक्लिप मणि का उपयोग करता है। मेरे रेल मॉडल इस तरह दिखता है:रेल-ऐप पर रूबी को HTTP-POST एक छवि

class App < ActiveRecord::Base 
    has_attached_file :image 
end 

जब मैं जावा कोड निष्पादित, मैं HHTTP/1.1 302 Found प्रतिक्रिया मेरी रेल एप्लिकेशन प्राप्त करें। अद्यतन जावा HTTP-पोस्ट विधि। यहाँ नया जावा कोड है कि मैं HTTP-पोस्ट के लिए उपयोग कर रहा हूँ है:

public void postFile(byte[] image) throws ClientProtocolException, IOException{ 
    HttpClient httpclient = new DefaultHttpClient(); 
    httpclient.getParams().setParameter(CoreProtocolPNames.PROTOCOL_VERSION, HttpVersion.HTTP_1_1); 
    HttpPost httppost = new HttpPost("http://localhost:3000/apps"); 

    ContentBody cb = new ByteArrayBody(image, "image/jpg", "icon.jpg"); 
    //ContentBody cb = new InputStreamBody(new ByteArrayInputStream(image), "image/jpg", "icon.jpg"); 

    MultipartEntity mpentity = new MultipartEntity(HttpMultipartMode.BROWSER_COMPATIBLE); 
    mpentity.addPart("image", cb); 
    httppost.setEntity(mpentity); 

    HttpResponse response = httpclient.execute(httppost); 
    System.out.println(response.getStatusLine()); 
} 

यहाँ रेल कंसोल पर नए डिबग है:

Started POST "/apps" for 127.0.0.1 at Mon Jan 31 00:26:07 +0000 2011 
Processing by AppsController#create as HTML 
Parameters: {"image"=>#<ActionDispatch::Http::UploadedFile:0x1041491c8 @content_type=nil, @original_filename="icon.jpg", @headers="Content-Disposition: form-data; name=\"image\"; filename=\"icon.jpg\"\r\n", @tempfile=#<File:/var/folders/NU/NUcfnxwVHmmnVUo9JUdNok+++TI/-Tmp-/RackMultipart20110131-3735-1ylugl7-0>>} 
SQL (0.1ms) BEGIN 
SQL (1.0ms) describe `apps` 
AREL (0.4ms) INSERT INTO `apps` (`appName`, `image_file_size`, `created_at`, `image_updated_at`, `image_file_name`, `image_content_type`, `updated_at`) VALUES (NULL, NULL, '2011-01-31 00:26:07', NULL, NULL, NULL, '2011-01-31 00:26:07') 
[paperclip] Saving attachments. 
SQL (1.3ms) COMMIT 
Redirected to http://localhost:3000/apps/36 
Completed 302 Found in 18ms 

अपलोड हो रहा है छवियों सीधे से ब्राउज़र एक आकर्षण की तरह काम करता है।

def create 
    @app = App.new(params[:app]) 

    respond_to do |format| 
    if @app.save 
     format.html { redirect_to(@app, :notice => 'App was successfully created.') } 
     format.xml { render :xml => @app, :status => :created, :location => @app } 
     format.json { render :json => @app, :status => :created, :location => @app }   
    else 
     format.html { render :action => "new" } 
     format.xml { render :xml => @app.errors, :status => :unprocessable_entity } 
     format.json { render :json => @app.errors, :status => :unprocessable_entity }   
    end 
    end 
end 

मैं गलत कहाँ जा रहा हूँ: यहाँ नियंत्रक/apps_controller.rb के कार्यान्वयन है?

+0

आप किस HTTP लाइब्रेरी का उपयोग कर रहे हैं? –

+0

अपाचे कॉमन्स HTTP क्लाइंट 4.1 – Raunak

+0

लॉग से ऐसा लगता है कि डीबी में एक प्रविष्टि डाली जा रही है और संलग्नक सहेजा जा रहा है, क्या आप यह पुष्टि कर सकते हैं कि यह मामला है या नहीं? और AppsController में निर्माण कार्य देखना भी दिलचस्प होगा, क्या आप इसे अपने प्रश्न में भी शामिल कर सकते हैं? – DanneManne

उत्तर

2

मुझे लगता है कि समस्या यह है कि आप ऐप को बनाने के लिए ऐप बनाने की कोशिश करते हैं [: ऐप] जब ऐप नामक कोई पैरामीटर नहीं है, केवल छवि। मैं अपने बनाने कार्रवाई के बजाय काम करना चाहिए में निम्नलिखित लगता है:

@app = App.new(:image => params[:image]) 

एक और अच्छी बात यह सुनिश्चित करें कि एक रिकॉर्ड डेटाबेस के लिए सहेजा नहीं गया है बनाने के लिए अपने अनुप्रयोग मॉडल में निम्नलिखित सत्यापन जोड़ने के लिए हो सकता है यदि कोई छवि बचा लिया गया था ।

validates_attachment_presence :image 
+0

धन्यवाद डैनमेन। – Raunak

संबंधित मुद्दे