如何从blob/formdata写入节点服务器上的音频文件
我有一个以音频/webm格式录制的MedaRecroder流。我要把它发送到节点服务器。我可以在req.files下看到响应中的文件,但当我播放它们时,它听起来像是有编码错误。
我正在尝试将音频文件写入服务器(最好是在.wav中,但webm也可以),这样我就可以访问和播放音频。
function onRecordingReady(e) {
var audio = document.getElementById('audio');
var tag = document.getElementById('tag').value
audio.src = URL.createObjectURL(e.data);
audio.play();
var formData = new FormData()
formData.append('source', e.data);
formData.append('tag', tag);
$.ajax({
url: 'http://localhost:3300/api/kb8',
type: "POST",
data:formData,
processData: false,
contentType: false,
success: function(data) {
console.log(data);
}
});
在我的服务器上,我像这样处理帖子
const express = require('express');
const bodyParser = require('body-parser');
const multer = require('multer');
const fs = require('fs');
const wav = require('wav');
let upload = multer();
const app = express();
const PORT = process.env.PORT || 3300;
app.use( bodyParser.json() ); // to support JSON-encoded bodies
app.use(bodyParser.urlencoded({ // to support URL-encoded bodies
extended: true
}));
app.use(function(req, res, next) {
res.header("Access-Control-Allow-Origin", "*");
res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
next();
});
app.get('/', function(req, res){
res.send('hello world');
});
app.post('/api/kb8', upload.any(), function(req, res) {
let formData = req.body;
let files = req.files;
fs.writeFileSync('audio/audiotest.webm', req.files);
console.log('form data', formData, 'file' , files);
res.sendStatus(200);
});
这是我的控制台输出
form data { tag: 'tag', } file { fieldname: 'source',
originalname: 'blob',
encoding: '7bit',
mimetype: 'audio/webm',
buffer: <Buffer 1a 45 df a3 9f 42 86 81 01 42 f7 81 01 42 f2 81 04 42 f3 81 08 42 82 84 77 65 62 6d 42 87 81 04 42 85 81 02 18 53 80 67 01 ff ff ff ff ff ff ff 15 49 ... >,
size: 14322 }
转载请注明出处:http://www.fymidi.com/article/20230526/2617232.html