在 ruby​​ on rails 上重命名上传文件

Posted

技术标签:

【中文标题】在 ruby​​ on rails 上重命名上传文件【英文标题】:Rename an upload file on ruby on rails 【发布时间】:2021-12-24 19:46:12 【问题描述】:

我是 ruby​​ on rails 的新手,我想更改我上传的图像的名称 谢谢

      resized_image = MiniMagick::Image.read(picture.image.download)
      resized_image = resized_image.combine_options do |b|
        b.resize '2760>'
        b.quality '80'
      end
      v_filename = picture.image.filename
      v_content_type = picture.image.content_type
      picture.image.purge
      picture.image.attach(io: File.open(resized_image.path), filename: v_filename, content_type: v_content_type)
    end```

【问题讨论】:

您尝试过更改v_filename = "new_name.jpeg"吗? 是的,它可以工作,但如果我希望它是动态的,例如用下划线替换空格它将不起作用 动态是什么意思?动态部分来自哪里,模型? @elmd00 您可以简单地更改 v_filename 值,然后再将其传递给 picture.image.attach @Chandan 如果我使用像 gsub 这样的方法,我会得到一个错误,比如“这不是一个公认的方法” 【参考方案1】:

由于@elmd00 在评论中提到picture.image.filename 属于ActiveStorage::Filename 类,所以gsub 无法解决问题,我们需要先使用to_s 方法将其转换为字符串,然后我们可以使用gsub将空格( ) 替换为下划线(_)

v_filename = v_filename.to_s.gsub(" ", "_")

【讨论】:

以上是关于在 ruby​​ on rails 上重命名上传文件的主要内容,如果未能解决你的问题,请参考以下文章

Ruby on rails在主机上传[关闭]

Ruby on Rails:嵌套命名范围

localhost在rails上重定向了太多次ruby

在控制器中找不到命名空间内的 Ruby on Rails 模型

Ruby on rails bootsy + cloudinary 上传图片麻烦

Ruby on Rails AJAX文件上传