Я пытаюсь выяснить, как правильно настроить Carrierwave , чтобы иметь возможность обрабатывать файл, отправляемый через File Uploader .
File Uploader
Я подключил fileuploader.js
и fileuploader.css
к моему конвейеру активов (rails 3.2.0) и имею следующий html:
<div id="file-uploader">
<noscript>
<p>Please enable JavaScript to use file uploader.</p>
<!-- or put a simple form for upload here -->
</noscript>
</div>
И 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());
}
});
});
Когда я выбираю файл, он запускает скрипт и вызывается мое приложение. Это то, что я не знаю, как справиться.
Carrierwave
У меня есть 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. Спасибо всем, кто может мне помочь.
Другие ссылки для справки: