使用 Ruby 从 MySQL 检索 BLOB 数据并将其保存为文件
Retrieving BLOB data from MySQL with Ruby and saving it as file
我只想知道如何使用Ruby检索保存在数据库(MySQL)中的BLOB数据,并将检索数据保存为特定目录中的文件。
假设我 'abc.wav' 在数据库中保存为 BLOB,我希望我的 Ruby 代码从数据库中获取它并将其保存在名为 "sound_files" 的文件夹中。
这里有人知道怎么做吗?
编辑:
截至目前,我正在使用以下代码,如下所示。
它的问题是输出的文件大小只有“0 kb”,我猜这表明它没有正确输出。
wav_data = getWavFiles(db_ip, db_id, db_pass, db_schema)
wav_data.each do | wav |
path = "path/to/file" + wav.filename
File.open(path, 'w')
File.write(path, wav.blobfile)
end
(假设 wav.filename
是文件名,wav.blobfile
是我从数据库中检索到的 blob 数据)
对此有什么建议吗?谢谢!
您可以创建一个动作,例如blob_to_file
并执行类似的操作,假设 filename
是您的 BLOB 文件的名称,而 blob
是列名称
def blob_to_file
record = Model.where(id: params[:id]).first
File.open(record.filename, 'w') do |f|
f.write record.blob
end
end
希望对您有所帮助!
我会在 Rake 任务或 Rails 控制台中从这样的事情开始:
MyModel.find_each do |wav|
filename = Rails.root.join('path/to/file', wav.filename)
File.open(filename, 'wb') { |file| file.write(wav.blobfile) }
end
将 MyModel
更改为您的模型名称。
假设您的模型名为 Song,您可以这样做。
Song.all.each do |song|
blob = song.blob
path = File.join("home","user","sound_files") #assuming you are on a nix* system
File.write(path+song.name,blob)
end
本质上,我们正在获取所有歌曲的列表并遍历每首歌曲并获取每首歌曲的 blob 并保存所需的位置。
注意:如果您有很多歌曲,您可能想要使用 find_each。
我只想知道如何使用Ruby检索保存在数据库(MySQL)中的BLOB数据,并将检索数据保存为特定目录中的文件。
假设我 'abc.wav' 在数据库中保存为 BLOB,我希望我的 Ruby 代码从数据库中获取它并将其保存在名为 "sound_files" 的文件夹中。
这里有人知道怎么做吗?
编辑: 截至目前,我正在使用以下代码,如下所示。 它的问题是输出的文件大小只有“0 kb”,我猜这表明它没有正确输出。
wav_data = getWavFiles(db_ip, db_id, db_pass, db_schema)
wav_data.each do | wav |
path = "path/to/file" + wav.filename
File.open(path, 'w')
File.write(path, wav.blobfile)
end
(假设 wav.filename
是文件名,wav.blobfile
是我从数据库中检索到的 blob 数据)
对此有什么建议吗?谢谢!
您可以创建一个动作,例如blob_to_file
并执行类似的操作,假设 filename
是您的 BLOB 文件的名称,而 blob
是列名称
def blob_to_file
record = Model.where(id: params[:id]).first
File.open(record.filename, 'w') do |f|
f.write record.blob
end
end
希望对您有所帮助!
我会在 Rake 任务或 Rails 控制台中从这样的事情开始:
MyModel.find_each do |wav|
filename = Rails.root.join('path/to/file', wav.filename)
File.open(filename, 'wb') { |file| file.write(wav.blobfile) }
end
将 MyModel
更改为您的模型名称。
假设您的模型名为 Song,您可以这样做。
Song.all.each do |song|
blob = song.blob
path = File.join("home","user","sound_files") #assuming you are on a nix* system
File.write(path+song.name,blob)
end
本质上,我们正在获取所有歌曲的列表并遍历每首歌曲并获取每首歌曲的 blob 并保存所需的位置。
注意:如果您有很多歌曲,您可能想要使用 find_each。