获取载波上传的文件大小
Posted
技术标签:
【中文标题】获取载波上传的文件大小【英文标题】:Getting file size of carrierwave upload 【发布时间】:2014-01-06 19:38:14 【问题描述】:我正在尝试。我正在尝试做以下事情:
<%= upload.file.size %>
和
<%= upload.file_size %>
两者都不起作用。我还在上传时运行了 :methods 并且没有看到任何会导致我上传文件大小的内容。如何获取上传的文件大小?
【问题讨论】:
【参考方案1】:这就是答案。 CarrierWave 并没有专门给你,所以你必须做一个很好的解决方法:
number_to_human_size(object.attachment.file.size)
【讨论】:
【参考方案2】:/app/uploaders/attachment_file_uploader.rb
class AttachmentFileUploader < CarrierWave::Uploader::Base
include CarrierWave::MimeTypes
include ActionView::Helpers::NumberHelper
storage :file
process :set_content_type
process :store_file_attributes
....
private
def store_file_attributes
if file && model
model.file_name = File.basename(file.file)
model.file_size = File.size(file.file)
model.human_size = number_to_human_size(model.file_size)
end
end
end
迁移:
class CreateAttachments < ActiveRecord::Migration
def change
create_table :attachments do |t|
t.references :attachable, polymorphic: true
t.string :file
t.string :file_name
t.integer :file_size
t.string :human_size
t.string :description
t.timestamps null: false
end
end
end
【讨论】:
【参考方案3】:不幸的是,carrierwave 不提供确定上传文件大小的方法(因为它不知道,唯一的方法是重新访问文件并检查文件大小)。您可以在这里使用两种不同的场景:
创建一个助手,它将从存储中检索文件并确定文件的大小(这可能很棘手,我个人不会这样做)。
上传后记录文件的大小并将其存储为模型的属性(有一个指南 in Carrierwave wiki 描述了如何执行此操作。
【讨论】:
【参考方案4】:这已经很晚了,但我想我会为未来的观众添加。
如果您想使用 RMagick 和 MiniMagick,请点击链接
“如果您将尺寸分配给自定义处理器中的模型(您已将上传器安装到该模型),则上传时将与图像路径一起保存。”
https://github.com/carrierwaveuploader/carrierwave/wiki/How-to%3A-Get-image-dimensions
class ImageUploader < CarrierWave::Uploader::Base
process :store_dimensions
# If you like, you can call this inside a version like this
# instead of at the top level.
# That will store the dimensions for this version.
version :show do
process :resize_to_limit => [500, 500]
process :store_dimensions
end
private
def store_dimensions
if file && model
model.width, model.height = `identify -format "%wx%h" #file.path`.split(/x/)
end
end
end
【讨论】:
以上是关于获取载波上传的文件大小的主要内容,如果未能解决你的问题,请参考以下文章