gpt4 book ai didi

ruby-on-rails - Rails/ActiveStorage 文件处理 – 仅在运行中还是在上传时?如果是这样,为什么?

转载 作者:行者123 更新时间:2023-12-04 05:40:29 26 4
gpt4 key购买 nike

我正在计划一个涉及视频上传和压缩的 RoR 项目。通常我会使用 Shrine 处理文件附件并在上传后在后台作业中使用 ffmpeg 处理视频压缩。

现在,ActiveStorage是内置的 Rails 5.2,我想选择它,但我不确定它是否可以很好地处理视频(带压缩)。到目前为止,我只找到了关于处理图像(使用 MiniMagick)或创建视频/pdf-previews(使用 ffmpeg 或 mutools)的文档,这些文档似乎都是即时发生的。

由于视频的压缩是时间密集型的,我想说它应该在上传后直接发生以准备好请求。 是否可以选择上传后的进程文件、使用 ActiveStorage 或仅在运行中 ?

如果不是,为什么或更确切地说是建议处理所有文件处理 即时 ?

谢谢

最佳答案

这是我上传后将视频转换为 MP4 的解决方案。也许不是最干净的,但它有效。我使用 Delayed::Job 异步处理调用。

def process_video!
if video.attached? && video.blob.content_type != 'video/mp4'

orig_video_tmpfile = "#{Rails.root}/tmp/#{video.blob.key}_#{video.blob.filename.to_s}"
mp4_video_tmpfile = "#{Rails.root}/tmp/#{video.blob.key}_#{video.blob.filename.base}.mp4"
File.open(orig_video_tmpfile, 'wb') do |f|
f.write(video.download)
end

system('ffmpeg', '-i', orig_video_tmpfile, mp4_video_tmpfile)

self.video.attach(
io: File.open(mp4_video_tmpfile),
filename: "#{video.blob.filename.base}.mp4",
content_type: 'video/mp4'
)

File.delete(orig_video_tmpfile)
File.delete(mp4_video_tmpfile)
end
end
handle_asynchronously :process_video!
after_commit :process_video!

关于ruby-on-rails - Rails/ActiveStorage 文件处理 – 仅在运行中还是在上传时?如果是这样,为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49676379/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com