2

这是我上传文件的方法:

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

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

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

但这有点肮脏。有没有更干净、更优雅的东西?

4

2 回答 2

1

有点晚了,但我为那些仍在寻找并到达这里的人提供了这个答案。

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 以在之后的创建函数上使用它。

于 2015-03-30T19:25:40.240 回答
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

于 2013-03-04T17:00:18.010 回答