使用Ruby从MySQL检索BLOB数据并将其另存为文件

时间:2015-05-22 10:22:47

标签: mysql ruby-on-rails ruby blob

我只想知道如何使用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数据) 对此有何建议?谢谢!

3 个答案:

答案 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

希望这有帮助!