RoR tinymce-rails-imageupload получить URL - PullRequest
1 голос
/ 03 апреля 2012

У меня есть начальный уровень. И я не могу получить URL изображения (я не знаю, как). https://github.com/Atlantia/tinymce-rails-imageupload

1.Controller

class TinymceAssetsController < ApplicationController  
  def create
    DataFile.save(params[:file])

    render json: {
    image: {
      url: view_context.image_url(image)
    }
 end
}

2.Model

class DataFile < ActiveRecord::Base
  def self.save(file)
    name = file.original_filename
    #create the file path
    path = File.join(directory, name)
    #write the file
    File.open(path, "wb") { |f| f.write(file.read) }
  end
end

Файл сохранен, но я не знаю, как получить URL-адрес ... спасибо за помощь.

Я решил сделать с Paperclip. Но есть проблема.

class DataFile < ActiveRecord::Base
  has_attached_file :file, styles: { medium: "300x300>", thumb: "100x100>" }
end

class TinymceAssetsController < ApplicationController
  def create
    @datafile.update_attributes(file: params[:file])

  render json: {
    image: {
      url: @datafile.file.url(:medium)
    }
  }
  end
end

NoMethodError (неопределенный метод update_attributes для nil: NilClass)

и еще один вопрос: если я не указал стиль, картинка будет иметь оригинальный размер?

Ответы [ 3 ]

1 голос
/ 10 августа 2012

вот решение с использованием dragonfly .. gem 'dragonfly', '0.9.12' https://github.com/markevans/dragonfly/

1.controller

class TinymceAssetsController < ApplicationController

  def create
    @image = StaticImage.new(:page_image => params[:file])
    @image.save    
    render json: {
      image: {
        url: @image.page_image.url
      }
    }, content_type: "text/html"
  end
end

2. Модель

class StaticImage < ActiveRecord::Base
  image_accessor :page_image
  attr_accessible :page_image
end
0 голосов
/ 15 января 2015

Я сделал это следующим образом:

Контроллер:

# For uploading images frm TinyMCE

class TinymceAssetsController < ApplicationController
  def create
    # Take upload from params[:file] and store it somehow...
    # Optionally also accept params[:hint] and consume if needed

    image=Image.save(params[:file])
    render json: {
      image: {
        url: view_context.image_url(image)
      }
    }, content_type: "text/html"
  end
end

Модель для сохранения изображения

class Image

  def self.save(file)
    name = file.original_filename
    #create the file path
    write_path = File.join(Rails.root,'public','images','upload', name)
    return_path = File.join('upload', name)
    #write the file
    File.open(write_path, "wb") { |f| f.write(file.read) }
    return_path
  end

end

Сохраняет файл в public / images /Загрузите и правильно вставьте правильный URL от Tinymce.

0 голосов
/ 03 апреля 2012

Если посмотреть на источник камня, с которым вы связались, он не справляется с сохранением / обработкой файла, просто связывает его в TinyMCE.

Я бы порекомендовал объединить камень с Скрепкой (https://github.com/thoughtbot/paperclip)

class Datafile < ActiveRecord::Base
  has_attached_file :file, :styles => { :medium => "300x300>", :thumb => "100x100>" }
end

Тогда вы можете просто передать ему объект file в update_attributes:

@datafile.update_attributes(:file => params[:file])

и назовите его в представлении с помощью

@datafile.file.url(:medium)

Если вы хотите продолжать обрабатывать его самостоятельно, он сохраняется в вашей файловой системе в каталоге / оригинальном имени файла от пользователя ... что, вероятно, оставляет вас открытым для атак с использованием инъекций и неправильных имен файлов! Если вы сгенерируете его самостоятельно, вы можете использовать класс Dir для просмотра правильного имени файла в файловой системе?

EDIT

Хорошо, учитывая поправку к вопросу, вот как должен выглядеть код вашего контроллера:

class TinymceAssetsController < ApplicationController
  def create
    @datafile = DataFile.create(file: params[:file])


      render json: {
        image: {
          url: @datafile.file.url(:medium)
        }
      }
  end
end

В вашем примере вы не создаете экземпляр объекта @datafile, так что это ноль. Вам нужно либо извлечь DataFile из базы данных, либо создать его экземпляр. По сути, Paperclip абстрагирует обработку файла, поэтому он похож на обычный атрибут. Вам все еще нужно создать объект в базе данных и т. Д., К которому он относится!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...