我在Rails 2.3.5上使用SWFUpload和Paperclip来上传图像和视频。如何存储图像的捕获日期和视频的持续时间?
以下在irb中正常工作:
irb(main):001:0> File.new('hatem.jpg').mtime
=> Tue Mar 09 16:56:38 +0200 2010
但是当我尝试使用Paperclip的before_post_process时:
before_post_process :get_file_info
def get_file_info
puts File.new(self.media.to_file.path).mtime # =>Wed Apr 14 18:36:22 +0200 2010
end
我获取当前日期而不是捕获日期。我怎样才能解决这个问题? 另外,如何获取视频持续时间并将其与模型一起存储?
谢谢。
答案 0 :(得分:0)
事实证明,SWFUpload在上传handlers.js文件之前提供对文件属性的访问。所以,要获得捕获日期:
//handlers.js
function uploadStart(file) {
// set the captured_at to the params
swfu.removePostParam("captured_at");
swfu.addPostParam("captured_at", file.modificationdate);
...
}
现在,您可以在控制器中收到它:
class UploadsController < ApplicationController
def create
@upload.captured_at = params[:captured_at].try :to_time
...
end
end
为了获得视频时长,我们使用了Paperclip的before_post_process来运行FFmpeg命令:
class Upload < ActiveRecord::Base
before_post_process :get_video_duration
def get_video_duration
result = `ffmpeg -i #{self.media.to_file.path} 2>&1`
if result =~ /Duration: ([\d][\d]:[\d][\d]:[\d][\d].[\d]+)/
self.duration = $1.to_s
end
return true
end
...
end