Ответ 1
Это можно сделать, но вам все равно понадобятся ваши клиенты для отправки имени файла orignal (и типа содержимого, если вы выполняете какую-либо проверку по типу).
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
И теперь вы можете установить фотографию с помощью
curl http://server/postcards/1/photo.json?filename=foo.png --data-binary @foo.png
И для указания типа содержимого используйте &type=image/png
.