使用 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