2011-06-20 15 views
11

Müşterilerim Blackberry ve Android telefonlarından bir görüntü yüklemeye çalışıyor. Form parametrelerini veya b) çok parçalı mesajları göndermeyi sevmezler. Ne yapmak istedikleri, sadece dosyadaki verilerle bir URL'ye bir POST yapmaktır. BöyleCarrierwave kullanarak raylara ham dosya yükleme

şey kıvrılma yapılabilir: curl -d @google.png http://server/postcards/1/photo.json -X POST

Ben kartpostal modelinin fotoğraf niteliğine ve sağ dizine koymak yüklenen fotoğraf istiyorum.

Denetleyicide böyle bir şey yapıyorum ama görüntü dizinde bozuk. Şimdilik bir "png" dosyanın bir manuel adlandırma yapıyorum:

def PostcardsController < ApplicationController 
... 
# Other RESTful methods 
... 
def photo 
    @postcard = Postcard.find(params[:id]) 
    @postcard.photo = request.body 
    @postcard.save 
end 

modeli: Bu yapılabilir ama yine orignal dosya göndermek müşterilerinize gerekecektir

class Postcard < ActiveRecord::Base 
    mount_uploader :photo, PhotoUploader 
end 

cevap

18

(ve türünde herhangi bir doğrulama yaparsanız içerik türü).

def photo 
    tempfile = Tempfile.new("photoupload") 
    tempfile.binmode 
    tempfile << request.body.read 
    tempfile.rewind 

    photo_params = params.slice(:filename, :type, :head).merge(:tempfile => tempfile) 
    photo = ActionDispatch::Http::UploadedFile.new(photo_params) 

    @postcard = Postcard.find(params[:id]) 
    @postcard.photo = photo 

    respond_to do |format| 
    if @postcard.save 
     format.json { head :ok } 
    else 
     format.json { render :json => @postcard.errors, :status => :unprocessable_entity } 
    end 
    end 
end 

Ve şimdi

curl http://server/postcards/1/photo.json?filename=foo.png --data-binary @foo.png 

kullanarak Ve content-type kullanımı &type=image/png belirtmek için fotoğraf ayarlayabilirsiniz.

+0

Oldukça fazla ihtiyacım olan şey bu. Minör detay: Yeni oluşturulan fotoğraf (UploadedFile sınıfının), "original_filename" öğesinin bir şeye ayarlanmasını gerektirir. Carrierwave, kukla veriler olsa bile orada bir şey olmasını bekler. Verilerimi düzgün bir şekilde göndermediğim için ana meselem benim kıvırma komutummuş gibi görünüyor. – jevy

+0

Birisi bana sordu. Curl komutu için şunu kullandım: 'curl --form 'image [[email protected];]" http: // server/images.json' – jevy

İlgili konular