我只想知道如何使用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数据)
对此有何建议?谢谢!
答案 0 :(得分:1)
我会在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
更改为您的模型名称。
答案 1 :(得分:1)
假设你的模型叫做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。
答案 2 :(得分:0)
您可以创建一个操作,例如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
希望这有帮助!