2017-06-15 78 views
1

我需要知道回形針附件圖像樣式的文件大小(不僅:original樣式中已有專用字段),而且我現在有點掙扎。恢復特定回形針圖像樣式的文件大小

  • 我沒有發現任何解決方案做到這一點的模型內部

  • 我已經安裝了paperclip-meta寶石,但這種寶石真的返回款式尺寸,而不是文件大小。

  • 我可能能夠在文件上傳到S3後檢索文件大小。我已閱讀了有關發送Http頭部請求或類似內容並解析返回的內容。我對此並不是很放心,這似乎有點複雜,因爲這些文件是在本地生成的,應該可以在某個時間由服務器訪問。

回答

1

我有同樣的需要。正如您所提到的,回形針附件具有:original樣式文件大小的數據庫字段,但size方法只是返回該值。

我想要一個快速解決方案,可以確定文件系統或S3(我同時使用)中的附件大小,而不必實際執行HTTP頭檢查。在觀看了回形針::存儲結構,我意識到我可以通過將覆蓋size方法對每個存儲方法在下面我config/initializers/paperclip.rb

module Paperclip 
    module Storage 
    module Filesystem 
     def size(style_name = default_style) 
     if original_filename 
      File.size(path(style_name)) 
     else 
      false 
     end 
     end 
    end 

    module S3 
     def size(style = default_style) 
     if original_filename 
      s3_object(style).content_length 
     else 
      false 
     end 
     rescue Aws::Errors::ServiceError => e 
     false 
     end 
    end 
    end 
end 

paperclip-meta寶石確實出現有size方法,除了圖像尺寸,寬高比等。我不確定這是否是比您嘗試更新的更新。它具有緩存數據庫中的值的優點。

+1

感謝Morgant,您的解決方案可能適用於S3,但我認爲它需要在獲取其'content_length'之前加載S3對象。在發送到S3之前,我已經找到了每種樣式的臨時文件的解決方案。它在這裏:https://stackoverflow.com/questions/14803185/paperclip-attachment-file-size – Maxence

+0

@Maxence我沒有調查性能,但發現它足以滿足我的需求。它必須獲取S3對象,但可能只是一個列表,而不是數據的完整獲取。我需要確定文件的大小,一旦它已經在S3上(執行各種數據遷移),但是在上傳之前需要它或緩存它,我寧願你的解決方案。 – morgant