我正在尝试获取carrierwave上传的文件大小。我试图做的事情,如:获取carrierwave上传的文件大小
<%= upload.file.size %>
和
<%= upload.file_size %>
也不正常工作。我还运行了:上传的方法,但没有看到任何会导致我上传文件大小的内容。如何获取上传的文件大小?
我正在尝试获取carrierwave上传的文件大小。我试图做的事情,如:获取carrierwave上传的文件大小
<%= upload.file.size %>
和
<%= upload.file_size %>
也不正常工作。我还运行了:上传的方法,但没有看到任何会导致我上传文件大小的内容。如何获取上传的文件大小?
不幸的是,carrierwave没有提供确定上传文件大小的方法(因为它不知道它,只有这样才能重新访问文件并检查它的文件大小)。你可以在这里两种不同的情况去:
创建一个帮助其将检索存储的文件,并确定它的大小(这可能会非常棘手。我个人不会走那条路)。
记录文件的大小,一旦它被上传并存储为模型的属性(有一个引导in Carrierwave wiki描述如何做到这一点。
这里的答案。CarrierWave不具体地说,它给你,所以你必须做一个很好的解决办法:
number_to_human_size(object.attachment.file.size)
/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
这是这样晚了,但我想我会增加对未来的观众。
按照链接,如果你想用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