【发布时间】:2015-02-07 00:44:30
【问题描述】:
我正在使用 recorder.js 并且已经成功地达到了可以录制音频 sn-p 并一遍又一遍地播放到我心中的内容的地步。但是现在我正在尝试将这个“blob”(我知道它包含正确的数据,因为它可以正确播放)作为我的 /public 文件夹中的音频 wav 文件。我的问题是我不确定如何处理 blob 并实际发布其内容。这是我的代码:
function sendWaveToPost1() {
console.log(savedWAVBlob);
$.ajax({ url: '/worm/save',
type: 'POST',
beforeSend: function(xhr) {xhr.setRequestHeader('X-CSRF-Token', $('meta[name="csrf-token"]').attr('content'))},
data: 'someData=' + savedWAVBlob,
success: function(response) {
console.log("success");
}
});
}
控制器:
class WormController < ApplicationController
def create
end
def
save
audio = params[:someData]
p audio
save_path = Rails.root.join("public/audioFiles")
# Open and write the file to file system.
File.open(save_path, 'wb') do |f|
f.write audio.read
end
render :text=> 'hi'
end
end
该代码基于此帖子:Save audio file in rails。 但是虽然我发布了一些东西,但它似乎是一个字符串,而不是音频文件的实际字节。这是我收到的 rails 控制台错误:
NoMethodError (undefined method `read' for "[object Blob]":String):
有什么想法吗?我觉得我一定错过了一些编码步骤,或者我完全误解了 blob 是什么。为什么不能直接这样发呢?
【问题讨论】:
-
savedWAVBlob 不是字符串。我猜它是一个对象。所以你不能使用“+”运算符。顺便说一句,你能给出你正在使用的插件的确切 URL 吗?
-
要发送文件数据,您需要发送多部分请求。请参阅stackoverflow.com/questions/5392344/… 在服务器端,它将作为 IO 文件数据对象传入 params,然后您可以将其保存到文件系统中。
-
@soundar 这是Recorderjs:github.com/mattdiamond/Recorderjs
标签: javascript ruby-on-rails audio blob