Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/59.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
Ruby on rails 上传前修改Carrierwave直接文件名_Ruby On Rails_Ruby On Rails 3_Carrierwave - Fatal编程技术网

Ruby on rails 上传前修改Carrierwave直接文件名

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

我使用Carrierwave Direct和S3进行文件上传

当文件上传到S3时,我们获取S3URL并通过FFMPEG运行它来测量持续时间

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,你可以在上传后立即重命名。我在下面详细介绍了解决方案。