问题描述
更具体地说,我在“ public”(静态文件夹)文件夹中的.js文件中初始化并处理了一个Blob。由于已经在客户端进行了处理,因此我想知道是否有一种方法可以以某种方式无需使用POST请求就可以在服务器端访问Blob。我们正在讨论的文件已处理并存储在静态文件(script.js)中的变量中,现在我需要将该变量/ blob上传到数据库中。但是,在静态文件中,我无权访问数据库,甚至无法将变量导出到服务器。如何访问静态文件中的该变量?如果有人了解我的要求,请编辑。
我的程序要做的是它通过客户端的麦克风录制音频,并且该音频文件必须上载到数据库。现在,我可以为客户端添加“下载”功能,并让客户端下载文件,然后客户端使用<input>
标签将POST请求发送到服务器,但是,现在客户端可以上传任何音频文件输入到输入标签中,基本上,这是一个用于实时监控学生写作考试的Web应用程序,这样他们就不会作弊,我会捕获音频并将其保存到数据库中。请参阅我的文件夹结构以获取更多详细信息,然后再次阅读问题。
我的文件夹结构:
--DBmodels
---AudioModels.js
---ImageModel.js
--node_modules
--public
---scipt.js (This contains the code for audio processing)
--views
---test.ejs (Main HTML page)
--index.js (server file)
--package.json
这是我的文件夹结构: Folder Structure
一种方法是在客户端下载它,然后要求客户端上传,但是由于某些原因,这对我不起作用。
这是我的script.js,但是我无法访问服务器上的变量chunk_audio[]
。
const chunks_audio = [];
mediaRecorder.onstop = async function (e) {
console.log("DONE WITH AUdio");
const blob = new Blob(chunks_audio,{
'type': "audio/ogg codecs=opus"
});
const audioURL = window.URL.createObjectURL(blob);
console.log(audioURL);
var link = document.getElementById("downloadaudio");
link.href = audioURL;
var audioMIMEtypes = ["audio/aac","audio/mpeg","audio/ogg","audio/opus","audio/wav"]
const audio = blob
const audiodb = new AudioSchema({
name : "Audio"+Date.Now().toString()[5]
});
saveAudio(audiodb,audio)
try{
const new_audio = await audiodb.save();
console.log("AUdio UPLOADED" + new_audio);
}catch (err){
console.log(err);
}
function saveAudio(audiodb,audioEncoded) {
if (audioEncoded == null) return;
console.log("before parse: " + audioEncoded);
const audio = JSON.parse(audioEncoded);
console.log("JSON parse: " + audio);
if (audio != null && audioMIMEtypes.includes(audio.type)) {
audiodb.audio = new Buffer.from(audio.data,"base64");
audiodb.audioType = audio.type;
}
}
// module.exports = chunks_audio; (This doesn't work for obvIoUs reasons)
这是我的服务器文件(index.js)
,我尝试使用POST请求,其中用户在下载音频文件后发布了音频文件,但是用户可以在<input>
标记中发布任何其他文件,因此与我的要求不符:
var audioMIMEtypes = ["audio/aac","audio/wav"]
app.post('/',async ( req,res,next)=>{
const audio = blob // 'blob' is a variable in script.js,Hence don't have access here
const audiodb = new AudioSchema({
name : "Audio"+Date.Now().toString()[5]
});
saveAudio(audiodb,"base64");
audiodb.audioType = audio.type;
}
}
})
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)