Я пытаюсь понять, как правильно настроить Carrierwave , чтобы иметь возможность обрабатывать файл, отправляемый через Программа загрузки файлов .
Я прикрепил fileuploader.js
и fileuploader.css
к моему конвейеру ресурсов (rails 3.2.0) и получил следующий HTML-код:
И javascript:
$(document).ready(function(){
var uploader = new qq.FileUploader({
// pass the dom node (ex. $(selector)[0] for jQuery users)
element: $('#file-uploader')[0],
// path to server-side upload script
action: '/photos',
debug: true,
params: {
authenticity_token: "<%= form_authenticity_token.to_s %>"
},
onComplete: function(id, fileName, responseJSON){
alert(responseJSON.toString());
}
});
});
Когда я выбираю файл, запускается скрипт и вызывается мое приложение. Это то, с чем я не знаю, как справиться.
У меня есть модель Photo
, в которой есть mount_uploader: image, ImageUploader
. Поэтому в PhotoController
у меня есть:
def create
io = AppSpecificStringIO.new(request.raw_post,params[:qqfile])
@photo = Photo.new(:image => io)
if @photo.save
respond_to do |format|
format.js { render :josn => @photo.to_json(:methods => :success, :only => [:id, :image]) }
end
else
respond_to do |format|
format.js { render :josn => {:success=>false} }
end
end
end
Параметр имеет только qqfile
, который является именем файла. Я обнаружил, что request.raw_post
содержит данные для изображения. Но я не знаю, какой это формат (64-битный или нет). Я пытался найти любой ресурс, который мог по этой теме, и пробовал что-нибудь. Один источник на вики-странице Carrierwave предложил использовать класс AppSpecificStringIO.
class AppSpecificStringIO < StringIO
attr_accessor :filepath
def initialize(*args)
super(*args[1..-1])
@filepath = args[0]
end
def original_filename
File.basename(filepath)
end
end
В вики-странице File Uploader есть предложение для CarrierWave, но я тоже ничего не могу понять. CarrierwaveStringIO
, насколько я понимаю, не существует.
Я просто хочу получить решение ajax для загрузки изображений в Carrierwave. Спасибо всем, кто может мне помочь.