我正在創建一個 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 中。
任何幫助將不勝感激,在此先感謝您。
uj5u.com熱心網友回復:
您需要渲染一個頁面(您正在下載影像)。
所以在你的控制器中:
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 更直接。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/496298.html
