这是我上传文件的方法:
name = file.original_filename
directory = "images/"
path = File.join(directory, name)
File.open(path, "wb") { |f| f.write(file.read) }
我需要重命名上传的文件 - 我想给它一个唯一的名称。但是如何获取文件名和扩展名?
如何重命名文件的一种方法是从文件名中删除扩展名(.jpg
- 删除最后4个字符),重命名该文件,然后合并名称+扩展名。
但这有点脏。是否有更清洁,更优雅的东西?
答案 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以在之后的创建函数上使用它。