Carrierwave + File Uploader

Я пытаюсь понять, как правильно настроить 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());
      }
    });
});

Когда я выбираю файл, запускается скрипт и вызывается мое приложение. Это то, с чем я не знаю, как справиться.

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. Спасибо всем, кто может мне помочь.

Другие ссылки для справки:

5
задан Community 23 May 2017 в 12:16
поделиться