Как получить дату захвата изображения и продолжительность видео при загрузке файлов с использованием SWFUpload и Paperclip on Rails - PullRequest
0 голосов
/ 14 апреля 2010

Я использую SWFUpload и Paperclip on Rails 2.3.5 для загрузки изображений и видео. Как я могу сохранить дату захвата изображений и продолжительность видео?

В irb правильно работает:

irb(main):001:0> File.new('hatem.jpg').mtime
=> Tue Mar 09 16:56:38 +0200 2010

Но когда я пытаюсь использовать Paperclip's 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

Я получаю текущую дату вместо даты захвата. Как я могу это исправить? Кроме того, как я могу получить продолжительность видео и сохранить его вместе с моделью?

Спасибо.

1 Ответ

0 голосов
/ 29 апреля 2010

Оказывается, что 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

Чтобы узнать продолжительность видео, мы использовали Paper_ip 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
...