簡體   English   中英

Ruby on Rails 將 blob 顯示為圖像

[英]Ruby on Rails display blob as image

我正在創建一個 Ruby on Rails 應用程序,其中我將圖像作為 blob 存儲在 MySQL 數據庫中。 我正在查詢數據庫並嘗試在我的視圖中顯示圖像,但我無法為其設置樣式或在其周圍放置其他 HTML,它僅顯示在黑色背景上。

這就是我在 Controller 中所做的:

def get
   @data = Data.find(1)
   send_data @data.image_object, :type => 'image/png', :disposition => 'inline'
end

這將顯示沒有其他 HTML 的圖像,我無法設置它的樣式。 我能做些什么? image_object是一個 blob,我需要將其轉換為可以在視圖中呈現的圖像。 我無法使用 GCP、AWS 或 Azure 雲存儲,我需要將圖像存儲在 MySQL 中。

任何幫助將不勝感激,在此先感謝您。

您需要渲染一個頁面(您正在下載圖像)。

所以在你的控制器中:

def show # better to stick with Rails conventions, use "show" rather than "get"
   @data = Data.find(1)
end

這將使用 app/views/layouts/application.html.erb 布局自動呈現 app/views/controllername/show.html.erb 頁面

<img src=#{@data.image_object} />

這種作為圖像標記的呈現假定您的圖像不是作為 blob 而是以 data-uri 格式存儲的:“data:image/png;base64,<base64-encoded image data>”。

如果您真的想堅持使用 blob 存儲,則必須在控制器或模型中對其進行轉換。

現在你有了一個可以包裝在 div 中的圖像元素,並使用 css 設置樣式。

最后......您沒有義務使用雲存儲將圖像存儲為單獨的 jpg 或 png 文件,您可以將其存儲在自己服務器上的目錄中。 通常它是 Rails 目錄結構之外的目錄,因此它可以在代碼更新后繼續存在。 這將是上傳和下載圖像文件的一種完全正常的方式。 Rails 7 現在可以適應這種情況,但在 Rails 6 之前,我們會使用像 Carrierwave gem 這樣的東西。 當您將圖像存儲為單獨的文件時,在視圖中渲染它們比嘗試渲染 blob 更直接。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM