получение пути к серверу изображения в ruby

Я использую элемент управления file field для загрузки изображения, как показано ниже:

<%= form_for(:ImageUpload, :html => { :id => "imageupload" }) do |f| %>
<table width="100%">
    <tr>
        <td align="left">
            <%= file_field( "upload", "datafile") %>
        </td>
    </tr>
</table>
<table width="92%">
            <tr>
               <td align="center">
                  <div class="button" style="margin-right:60px;">
                    <%= f.submit "Next", { :class => "buttonSearch"} %>
                  </div>
               </td>
            </tr>
</table>
<% end %>

страница контроллера:

  def create

    get_img_path = params[:upload][:datafile].path
    @blah = get_img_path

    render 'new'
  end

И я хочу получить отдельный путь к загруженному изображению, а также хочу изменить путь к серверу изображения на этот app/assets/upload, потому что я хочу сохранить загруженное изображение по этому пути app/assets/uploaded. Пожалуйста, предложите мне, жду вашего ответа. Спасибо.


person user3514596    schedule 10.04.2014    source источник


Ответы (2)


Я бы порекомендовал вам использовать гем Paperclip или Carrierwave для решения этой проблемы.

Скрепка — нажмите здесь

Carrierwave — нажмите здесь

Чтобы получить путь, вы можете сделать это

file_path = params[:upload].blank? ? "" : params[:upload].path
person Rajdeep Singh    schedule 10.04.2014
comment
есть ли другой способ получить путь к серверу изображения. - person user3514596; 10.04.2014
comment
но получаю ошибку неопределенного метода `путь' для nil:NilClass - person user3514596; 10.04.2014
comment
только params[:upload].path не params[:upload][:datafile].path - person Rajdeep Singh; 10.04.2014
comment
выдает мне ошибку неопределенного метода path' for "{\"datafile\"=>\"index.jpg\"}":String" and when i am using this "params[:upload][:datafile]" then it gets me error "undefined method path' для index.jpg:String - person user3514596; 10.04.2014

Лично я бы использовал Paperclip, но если вам нужно полностью «родное» решение, почему бы не попробовать эта рекомендация:

path = params[:file].path

Глядя на ваши обновления, кажется, что вы сталкиваетесь с проблемой, обращаясь только к строковому элементу пути. Решением этого будет перевести его в File объект< /a>, для которого вы затем сможете загрузить путь

Вы можете просмотреть это руководство о том, как это сделать. Это:

#app/models/file.rb
Class File < ActiveRecord::Base
 def self.save(upload)
    name =  upload['datafile'].original_filename
    directory = "public/data"
    # create the file path
    path = File.join(directory, name)
    # write the file
    File.open(path, "wb") { |f| f.write(upload['datafile'].read) }
  end
end

Вот как вы сохраняете файл; но если вы хотите получить путь, вы все равно будете использовать метод .path, за исключением того, что вам нужно сделать это для объекта File

Для этого я просмотрел несколько ресурсов и нашел это:

file = File.join(Rails.root, 'app', 'csv', 'names.csv')
file.path
person Richard Peck    schedule 10.04.2014
comment
Я уже видел эту ссылку tutorialspoint.com/ruby-on- rails/rails-file-uploading.htm, но у меня есть приложение базы данных. - person user3514596; 10.04.2014
comment
Да, разве БД не сохраняет файл? Как вы сейчас сохраняете файл? - person Richard Peck; 10.04.2014
comment
пока я не сохраняю файл, но моя идея состоит в том, что я хочу получить отдельный путь к загруженному изображению и изменить путь к серверу изображения в это приложение/активы/загрузить, потому что я хочу сохранить загруженное изображение в этом приложении пути /assets/uploaded, поэтому я хочу получить путь к серверу изображения. - person user3514596; 10.04.2014
comment
Итак, вы не сохраняете файл, но хотите сохранить его по пути uploaded? Это похоже на спасение для меня? - person Richard Peck; 10.04.2014