我们正在使用 CarrierWave 在我正在处理的项目中上传文件。一个新的要求是解决上传 DICOM 文件的需要。除了大量其他数据之外, DICOM文件还包含一个(或多个)图像。使用Ruby DICOM gem,我可以轻松地从文件中提取图像。当我尝试使用 CarrierWave 上传它们时,我的问题就出现了。
我希望能够从上传的文件中提取 JPEG,并存储该文件而不是原始 DICOM 文件。我尝试创建一个version
这样的上传文件:
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,而不是存储我处理的原始文件?