我們正在使用CarrierWave在我正在處理的項目中進行文件上傳。新要求提出了需要上傳DICOM文件的需求。 DICOM文件除了包含大量其他數據外,還包含一個圖像(或多個圖像)。使用Ruby DICOM寶石,我可以輕鬆地從文件中提取圖像。我嘗試使用CarrierWave上傳它們時出現問題。Carrierwave:從上傳的文件中提取圖像並丟棄原始文件
我希望能夠從上傳的文件中提取JPEG,並存儲該文件而不是原始DICOM文件。我試圖創建上傳的文件這樣的0:
version :jpeg, :if => :is_dicom? do
process :create_jpeg
end
def is_dicom?(file)
IO.binread(file.to_file, 4, OFFSET) == 'DICM'
end
def create_jpeg
Rails.logger.debug "self is class #{self.class}"
dcm = DICOM::DObject.read(file.path)
image = dcm.image.normalize
end
我根據我的create_jpeg
方法了另一個create_thumbnail
方法,我發現它,沒有它的異常處理,將減少到:
def create_thumbnail(width, height, gravity = 'Center')
self.resize_to_fill(width, height, gravity)
end
我可以在調試控制檯中看到DICOM正在成功讀取,但它實際上並不保存將被提取的JPEG。相反,我得到了我原來的DICOM,並在文件名前加了一個'jpeg'的副本。我怎麼能告訴CarrierWave我想存儲這個JPEG我提取的,而不是存儲我處理的原始文件?
感謝您的迴應卡米爾。看起來像我可以像上傳文件一樣上傳文件,但我不知道如何告訴CarrierWave存儲我從DICOM創建的JPEG文件。任何想法,如果可以做到? – Zajn
據我所知你只需要用JPEG替換文件(在CW中,或者甚至在磁盤上?)。您可能必須重寫一些默認設置,例如更改文件名以匹配jpeg擴展名。它實際上只是在文件上傳時執行過程中指定的功能。 –
用更多代碼更新了答案,但未經測試! –