gpt4 book ai didi

javascript - 将音频 blob 另存为 Rails 应用程序中的文件

转载 作者:行者123 更新时间:2023-11-30 10:09:25 25 4
gpt4 key购买 nike

我正在使用 recorder.js 并且已经成功地达到了可以录制音频片段并一遍又一遍地播放它的程度。但是现在我正在尝试将这个“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");
}
});

Controller :

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 是什么。为什么我不能像这样直接发布呢?

最佳答案

您需要将 blob 转换为 base64url 并通过 ajax 将其发送到数据中以上传到对我有用的 rails

var reader  = new window.FileReader();
reader.readAsDataURL(blob);
reader.onloadend = function() {
var base64data = reader.result;
var savedWAVBlob=base64data
console.log(savedWAVBlob );
}

也在 Controller 中

require 'base64'
save_path = Rails.root.join("public/audio")
unless File.exists?(save_path)
Dir::mkdir(Rails.root.join("public/audio"))
end
data=params[:url]
audio_data=Base64.decode64(data['data:audio/ogg;base64,'.length .. -1])
File.open(save_path+"_audio", 'wb') do |f| f.write audio_data end
current_user.user_detail.audio=File.open(save_path+"_audio")
current_user.user_detail.audio_content_type="application/octet-stream"

关于javascript - 将音频 blob 另存为 Rails 应用程序中的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27373620/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com