Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Amazon s3 使用Silence上载视频文件并生成缩略图_Amazon S3_Ruby On Rails 5_Shrine - Fatal编程技术网

Amazon s3 使用Silence上载视频文件并生成缩略图

Amazon s3 使用Silence上载视频文件并生成缩略图,amazon-s3,ruby-on-rails-5,shrine,Amazon S3,Ruby On Rails 5,Shrine,我想使用圣殿宝石上传视频文件,转码,并从视频生成缩略图 我正在尝试将埃里克·达斯特朗的照片转换成视频。我在创建视频上传程序时遇到问题。我基于 事实上,那个位置没有文件。那么等待上传时文件存储在哪里 此外,使用演示将照片上载到AWS(production env),对象存储在bucket中名为“照片”的文件夹中。Shirike使用表名来命名文件夹。是否可以创建替代文件夹名称和嵌套文件夹名称 谢谢你-看起来像一块神奇的宝石!试着更好地理解它 Thx进一步深入研究文档,我只剩下一个问题就解决了这个问题

我想使用圣殿宝石上传视频文件,转码,并从视频生成缩略图

我正在尝试将埃里克·达斯特朗的照片转换成视频。我在创建视频上传程序时遇到问题。我基于

事实上,那个位置没有文件。那么等待上传时文件存储在哪里

此外,使用演示将照片上载到AWS(production env),对象存储在bucket中名为“照片”的文件夹中。Shirike使用表名来命名文件夹。是否可以创建替代文件夹名称和嵌套文件夹名称

谢谢你-看起来像一块神奇的宝石!试着更好地理解它


Thx

进一步深入研究文档,我只剩下一个问题就解决了这个问题-是否可以控制原始和拇指上传到AWS bucket中的哪些文件夹?Thx

解决方案:

require "streamio-ffmpeg"
require "tempfile"

class VideoUploader < ImageUploader
  plugin :add_metadata
  plugin :validation_helpers
  plugin :processing
  plugin :versions
  plugin :delete_raw

  add_metadata do |io, context|
    movie = Shrine.with_file(io) { |file| FFMPEG::Movie.new(file.path) }
    { "duration"   => movie.duration,
      "bitrate"    => movie.bitrate,
      "resolution" => movie.resolution,
      "frame_rate" => movie.frame_rate
    }

  end

  process(:store) do |io, context|
    versions = {original: io}

    io.download do |original|
      screenshot1 = Tempfile.new(["screenshot1", ".jpg"], binmode: true)
      screenshot2 = Tempfile.new(["screenshot2", ".jpg"], binmode: true)
      screenshot3 = Tempfile.new(["screenshot3", ".jpg"], binmode: true)
      screenshot4 = Tempfile.new(["screenshot4", ".jpg"], binmode: true)

      movie = FFMPEG::Movie.new(original.path)
      movie.screenshot(screenshot1.path, seek_time: 5, resolution: '640x480')
      movie.screenshot(screenshot2.path, seek_time: 10, resolution: '640x480')
      movie.screenshot(screenshot3.path, seek_time: 15, resolution: '640x480')
      movie.screenshot(screenshot4.path, seek_time: 20, resolution: '640x480')

      [screenshot1, screenshot2, screenshot3, screenshot4].each(&:open) # refresh file descriptors

      versions.merge!(screenshot1: screenshot1, screenshot2: screenshot2, screenshot3: screenshot3, screenshot4: screenshot4)
    end

    versions
  end

  Attacher.validate do
    validate_max_size 100.megabyte, message: "is too large (max is 100 MB)"
    validate_mime_type_inclusion ALLOWED_TYPES
  end
end
需要“streamio ffmpeg”
需要“临时文件”
类视频上传器<图像上传器
插件:添加元数据
插件:验证帮助程序
插件:处理
插件:版本
插件:删除_raw
添加元数据do | io,上下文|
movie=shire.with_file(io){| file | FFMPEG::movie.new(file.path)}
{“duration”=>movie.duration,
“比特率”=>movie.bitrate,
“分辨率”=>movie.resolution,
“帧速率”=>movie.frame\u rate
}
结束
进程(:存储)do | io,上下文|
版本={original:io}
io.download do |原件|
screenshot1=Tempfile.new([“screenshot1”,“.jpg”],binmode:true)
screenshot2=Tempfile.new([“screenshot2”,“.jpg”],binmode:true)
screenshot3=Tempfile.new([“screenshot3”,“.jpg”],binmode:true)
screenshot4=Tempfile.new([“screenshot4”,“.jpg”],binmode:true)
movie=FFMPEG::movie.new(original.path)
电影。截图(截图1.path,搜索时间:5,分辨率:'640x480')
电影。截图(截图2.path,搜索时间:10,分辨率:'640x480')
电影。截图(截图3.path,搜索时间:15,分辨率:'640x480')
电影。截图(截图4.path,搜索时间:20,分辨率:'640x480')
[screenshot1,screenshot2,screenshot3,screenshot4]。每个(&:打开)#刷新文件描述符
版本。合并!(截图1:screenshot1,screenshot2:screenshot2,screenshot3:screenshot3,screenshot4:screenshot4)
结束
版本
结束
Attacher.do
验证\u max\u size 100.MB,消息:“太大(最大为100 MB)”
验证\u mime\u类型\u允许的包含\u类型
结束
结束
/var/folders/mm/_j8x4k2176jcv31zvbc497_c0000gp
    /T/shrine20190607-24438-4f3jz2.m4v: No such file or directory
require "streamio-ffmpeg"
require "tempfile"

class VideoUploader < ImageUploader
  plugin :add_metadata
  plugin :validation_helpers
  plugin :processing
  plugin :versions
  plugin :delete_raw

  add_metadata do |io, context|
    movie = Shrine.with_file(io) { |file| FFMPEG::Movie.new(file.path) }
    { "duration"   => movie.duration,
      "bitrate"    => movie.bitrate,
      "resolution" => movie.resolution,
      "frame_rate" => movie.frame_rate
    }

  end

  process(:store) do |io, context|
    versions = {original: io}

    io.download do |original|
      screenshot1 = Tempfile.new(["screenshot1", ".jpg"], binmode: true)
      screenshot2 = Tempfile.new(["screenshot2", ".jpg"], binmode: true)
      screenshot3 = Tempfile.new(["screenshot3", ".jpg"], binmode: true)
      screenshot4 = Tempfile.new(["screenshot4", ".jpg"], binmode: true)

      movie = FFMPEG::Movie.new(original.path)
      movie.screenshot(screenshot1.path, seek_time: 5, resolution: '640x480')
      movie.screenshot(screenshot2.path, seek_time: 10, resolution: '640x480')
      movie.screenshot(screenshot3.path, seek_time: 15, resolution: '640x480')
      movie.screenshot(screenshot4.path, seek_time: 20, resolution: '640x480')

      [screenshot1, screenshot2, screenshot3, screenshot4].each(&:open) # refresh file descriptors

      versions.merge!(screenshot1: screenshot1, screenshot2: screenshot2, screenshot3: screenshot3, screenshot4: screenshot4)
    end

    versions
  end

  Attacher.validate do
    validate_max_size 100.megabyte, message: "is too large (max is 100 MB)"
    validate_mime_type_inclusion ALLOWED_TYPES
  end
end