Javascript 在rails 5中存储blob的最佳方法是什么?
我正在创建一个录音机应用程序(rails 5)。目前,我的应用程序能够开始录制、停止录制,并将录制(.wav)保存到公共目录。我正在生成一个blob,但目前没有对它做任何处理,因为我真的不知道如何处理它 此应用程序的目的是能够录制您自己的音频,并将其保存到应用程序中的用户配置文件中,然后在以后对数据执行其他各种操作。我以前使用过carrierwave和曲别针来管理多部分数据,但我没有使用过音频文件,所以我不确定最佳做法。以下是我的一些想法:Javascript 在rails 5中存储blob的最佳方法是什么?,javascript,ruby-on-rails,ruby,ruby-on-rails-5,Javascript,Ruby On Rails,Ruby,Ruby On Rails 5,我正在创建一个录音机应用程序(rails 5)。目前,我的应用程序能够开始录制、停止录制,并将录制(.wav)保存到公共目录。我正在生成一个blob,但目前没有对它做任何处理,因为我真的不知道如何处理它 此应用程序的目的是能够录制您自己的音频,并将其保存到应用程序中的用户配置文件中,然后在以后对数据执行其他各种操作。我以前使用过carrierwave和曲别针来管理多部分数据,但我没有使用过音频文件,所以我不确定最佳做法。以下是我的一些想法: 在服务器上存储实际文件本身是不可伸缩的,因此这是不可能
bytea
视为其他一些响应中的数据类型,但其中会存储什么?整团
例如:
数据:音频/wav;base64,2009年7月9日,英国GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGD7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 GGGGGGGGG7 G7 G7 G7 7 G7 G7 G7 G7 G7 G7 G7 G7 G7 G7 G7 G7 G7 G7 G7 G7 G7 G7 G7 G7 G7 G7 G7 G7 G7 G7 G7 G7 G7 G7 G7 G7 G7 G7 G7 G7 G7 G7 G7 G7 G7 G7 G7 G7 G7 G7 G7 G7 G7 G7 G7 G7 G7 G7 G7 G7 YYQTOLVAPZLCAMQI8H1SHEHGP8P5KTSBLLEXV0QODC7OTGERIFRP6CutZF6QP2AH4I9MLGQWTZKKNLBIHLGOPQGKZW4PBYZK4THMDAXUVRQTATXYOJCC2/iTY7af0IKBY0siodKsV+VFqAsOndoZJeTI1aG72UB/fo4cZnrUdwmKDROP+J661JHULTSNIKWSY4JGTE
如果这不是最好的选择,你能告诉我哪一个是最好的,以及如何实现它吗
编辑:对不起,剧透没有像我期望的那样工作
编辑2:其他一些问题。
我不确定我实际上需要提供以下attach
方法。现在,我将音频作为文件传递到控制器:
#<ActionDispatch::Http::UploadedFile:0x007ff58958a788 @tempfile=#<Tempfile:/var/folders/xb/zm03wqls70gf3thlfy0d67bh0000gn/T/RackMultipart20190414-15311-1essuud.wav>, @original_filename="1555288144507.wav", @content_type="audio/wav", @headers="Content-Disposition: form-data; name=\"audio\"; filename=\"1555288144507.wav\"\r\nContent-Type: audio/wav\r\n">
看起来我在JS中做的事情可能比我需要做的要多得多
JS保存功能:
function saveRecording() {
var data = new FormData();
data.append("audio", recordingBlob, (new Date()).getTime() + ".wav");
var request = new XMLHttpRequest();
request.open("POST", "/landing_pages/save_audio");
request.send(data);
request.onload = function(oEvent) {
if (request.status == 200) {
console.log("Uploaded");
} else {
console.log("Error: " + request.status);
}
};
}
如果您使用的是PostgreSQL,我建议您不要将其保存为
bytea
和BLOB
,您可以在这里了解其优点
相反,如果您选择将其保存在云提供商中,Rails 5引入了ActiveStorage,这是一个易于使用的框架,用于在多个后端上进行文件存储
您在使用PostgreSQL吗?非常感谢。我认为ActiveStorage听起来是PoC的一个不错的选择,甚至可能是全尺寸的。你有什么可以看看我的新编辑吗?我没有遵循应该传递给ActiveStorage的attach方法的内容。我正在保存文件,但它们看起来像二进制文件,没有扩展名。你能进一步解释你的新问题吗?当使用ActiveStorage的附加方法时,
current\u user.audio\u recordings.attach()
,它正在我的存储目录中创建一个文件,但它不是我所期望的.wav,而是二进制文件。我不确定我需要向attach
方法的io
部分传递什么,或者我只是做错了。我完全错了,它只是在存储扩展时剥离了扩展,一切都很好。谢谢!:)
function saveRecording() {
var data = new FormData();
data.append("audio", recordingBlob, (new Date()).getTime() + ".wav");
var request = new XMLHttpRequest();
request.open("POST", "/landing_pages/save_audio");
request.send(data);
request.onload = function(oEvent) {
if (request.status == 200) {
console.log("Uploaded");
} else {
console.log("Error: " + request.status);
}
};
}