2014-09-26 61 views
0

我想知道如何獲取已保存到tmp文件夾的文件的大小。我使用carrierwave上傳我的圖片,如果驗證失敗的圖像的縮略圖顯示在表格在tmp文件夾中獲取圖像的大小

<% if build.object.image? %> 
    <%= image_tag build.object.image_url :small_animal_image %> 
    <%= build.hidden_field :image_cache %> 
<% end %> 

中從我讀這是正常的行爲。

我想獲得上傳的原始圖像的文件大小,但使用尺寸方法我只得到一個0返回

def example_method 
image = params[:animal][:animal_images_attributes] 

image.each do |k,v| 
img_cache = v["image_cache"] 
img_cache_size = img_cache.size 
img = v["image"] 

    ap(img_cache) 
    ap(img) 
    ap(img_cache_size) 

end 
end 

上述的在控制檯的輸出是

"0" 
"" 
#<ActionDispatch::Http::UploadedFile:0x00000002fe40c8 @tempfile=#<Tempfile:/tmp/RackMultipart20140926-3003-1rfzkcq>, @original_filename="cat.jpg", @content_type="image/jpeg", @headers="Content-Disposition: form-data; name=\"animal[animal_images_attributes][0][image]\"; filename=\"cat.jpg\"\r\nContent-Type: image/jpeg\r\n"> 
0 

這是散的樣子

animal_images_attributes"=>{"0"=>{"image_cache"=>"", "image"=>#<ActionDispatch::Http::UploadedFile:0x00000002fe40c8 @tempfile=#<Tempfile:/tmp/RackMultipart20140926-3003-1rfzkcq>, @original_filename="cat.jpg", @content_type="image/jpeg", @headers="Content-Disposition: form-data; name=\"animal[animal_images_attributes][0][image]\"; filename=\"cat.jpg\"\r\nContent-Type: image/jpeg\r\n">, "_destroy"=>"false"}}} 

這甚至可能嗎?

任何指針讚賞

感謝

回答

1

您可以使用此:

tempfilepath = params[:animal][:animal_images_attributes][:image].tempfile.path 
size = `identify #{tempfilepath} | awk '{print $7}'` 

確保你已經在終端識別工作。

更新

一個更簡單的解決方案將是

File.size(tempfilepath) 
+0

非常感謝,你會介意解釋第二部分我有關係嗎? – Richlewis 2014-09-26 12:25:20

+0

以及如何將大小回作爲一個數字,而不是一個字符串?這樣我就可以對它進行比較 – Richlewis 2014-09-26 12:32:14

+0

當然,確定實際使用imagemagick來提供有關圖像的信息,第二部分給出的是用於從標識顯示的信息中取出大小,如下所示:'cuscopanorama.jpg JPEG 1000x284 1000x284 + 0 + 0 8位DirectClass 66KB 0.000u 0:00.000'我們將從這裏獲得66KB。如果你只想要數字,試試用正則表達式方法:'「66KB」.scan(/ \ d + /)。join.to_i' – aelor 2014-09-26 12:44:50