Ruby on rails 上传前修改Carrierwave直接文件名
我使用Carrierwave Direct和S3进行文件上传 当文件上传到S3时,我们获取S3URL并通过FFMPEG运行它来测量持续时间Ruby on rails 上传前修改Carrierwave直接文件名,ruby-on-rails,ruby-on-rails-3,carrierwave,Ruby On Rails,Ruby On Rails 3,Carrierwave,我使用Carrierwave Direct和S3进行文件上传 当文件上传到S3时,我们获取S3URL并通过FFMPEG运行它来测量持续时间 duration = `ffmpeg -i "#{post.s3_url}" 2>&1 | grep Duration | awk '{print $2}' | tr -d ,` 问题是,我们的一些用户正在文件名中放置特殊字符 我已经看到了如何使用Fog重命名文件。然而,我想知道是否有更简单的方法。。。在上传之前,我想在Carrierwave
duration = `ffmpeg -i "#{post.s3_url}" 2>&1 | grep Duration | awk '{print $2}' | tr -d ,`
问题是,我们的一些用户正在文件名中放置特殊字符
我已经看到了如何使用Fog重命名文件。然而,我想知道是否有更简单的方法。。。在上传之前,我想在Carrierwave Direct中对文件名进行硬编码
我很好奇实现这一目标的最佳方法是什么
感谢您的帮助 在上传文件之前,您似乎无法修改文件名 最终,解决方案是允许文件上传(原始文件名)到S3,然后使用Fog复制、重命名,然后删除原始文件 然后,我们对文件的新版本运行FFMPEG,并使用更新的名称 代码如下 通过Fog打开与S3的连接
connection = Fog::Storage.new({
:provider => 'AWS',
:aws_access_key_id => '[access key]',
:aws_secret_access_key => '[secret key]',
})
选择文件所在的存储桶
bucket = connection.directories.get('bucket_name')
选择要重命名/复制的原始文件
original_file = bucket.files.get 'path/to/filename.jpg'
复制原始文件,创建一个新文件-根据需要命名,并将其公开
new_file = bucket.files.create :key => 'path/to/newfilename.jpg', :body => original_file.body, :public => true
此时,我们复制了原始文件,并将其重命名,以避免与FFMPEG冲突。我们现在可以销毁原件了
original_file.destroy
你找到解决方法了吗?我发现你在上传之前不能重命名,但是,使用Fog,你可以在上传后立即重命名。我在下面详细介绍了解决方案。