Ruby On Rails - 如何重命名当前上传的文件?

时间:2013-03-04 16:50:35

标签: ruby-on-rails ruby file-upload file-rename

这是我上传文件的方法:

name = file.original_filename
directory = "images/"
path = File.join(directory, name)
File.open(path, "wb") { |f| f.write(file.read) }

我需要重命名上传的文件 - 我想给它一个唯一的名称。但是如何获取文件名和扩展名?

如何重命名文件的一种方法是从文件名中删除扩展名(.jpg - 删除最后4个字符),重命名该文件,然后合并名称+扩展名。

但这有点脏。是否有更清洁,更优雅的东西?

2 个答案:

答案 0 :(得分:0)

这样做怎么办?

File.rename(file, folder_path + "/" + new_name + File.extname(file))

例如,在文件的同一文件夹上调用此脚本:

new_name = "TESTING"

File.open("test.txt") do |file|
  File.rename(file, new_name + File.extname(file))
end

将文件重命名为:TESTING.txt

答案 1 :(得分:0)

一点'晚',但我把这个答案给那些仍在寻找并到达这里的人。

photo = params[:photo]
name = photo.original_filename
directory = "public/uploads/photos"
path = File.join(directory, name) 
uniq_name = (0...10).map { (65 + rand(26)).chr }.join
time_footprint = Time.now.to_formatted_s(:number)
File.open(path, "wb") do |file|
  file.write(photo.read)
  @uniq_path = File.join(directory, uniq_name + time_footprint + File.extname(file))
  File.rename(file, @uniq_path)
end

我从How to generate a random string in Ruby获取随机字符串生成。并设置@uniq_path以在之后的创建函数上使用它。