Как отобразить изображение из личной папки в режиме просмотра?
-
21-12-2019 - |
Вопрос
Мне нужен краткий совет по кое-чему, что кажется действительно простым.У меня есть несколько фотографий в личной папке, и я хотел бы отобразить их в моем представлении.
Единственное решение, которое я нашел, было таким:
def show
send_file 'some/image/url', :disposition => 'inline', :type => 'image/jpg', :x_sendfile => true
end
Я это читал :disposition => 'inline'
не должно вызывать загрузку изображения и позволять мне отображать его в моем представлении.Проблема в том, что каждый раз, когда я запускаю show
действие, загрузка изображения автоматически активируется, и оно автоматически загружается.Просмотр для show
действие не отображается.
Как я могу отобразить это изображение в моем представлении?Спасибо.
Решение
То, как я это делаю, и я не говорю о том, что он идеально в книге, я делаю рут для изображений и действий в контроллере, чтобы сделать его.
Так, например, в маршрутах .rb
match '/images/:image', to: "your_controller#showpic", via: "get", as: :renderpic
.
В вашем контроллере:
def showpic
send_file "some/path/#{params[:image]}.jpg", :disposition => 'inline',
:type => 'image/jpg', :x_sendfile => true # .jpg will pass as format
end
def show
end
.
и по вашему мнению
<img src="<%= renderpic_path(your image) %>">
.
Вот рабочий пример, с меньшим количеством параметров на «send_file»
def showpic
photopath = "images/users/#{params[:image]}.jpg"
send_file "#{photopath}", :disposition => 'inline'
end
. Другие советы
Я думаю, проблема в том, что type
.Из документации:
:type - specifies an HTTP content type
Таким образом, правильный тип контента HTTP должен быть image/jpeg
вместо того, чтобы image/jpg
, как вы можете смотрите здесь.Попробуйте с:
:type => 'image/jpeg'
Вы также можете перечислить все доступные типы кодирования Mime::EXTENSION_LOOKUP
в консоль rails.
Пример:
Контроллер
class ImagesController < ApplicationController
def show_image
image_path = File.join(Rails.root, params[:path]) # or similar
send_file image_path, disposition: 'inline', type: 'image/jpeg', x_sendfile: true
end
end
Маршруты
get '/image/:path', to: 'images#show_image', as: :image
Число просмотров
image_tag image_path('path_to_image')
Вам нужно будет иметь представление, используйте изображение_tag, чтобы отобразить на вид.
Подобный вопрос был поднят здесь: Показаны изображения с операторной волной в рельсах 3.1 в папке частного магазина