如何在 express(nodejs) 中处理 blob
How to handle blob in express(nodejs)
我有 google 扩展、React 前端应用程序和快速服务器。
我使用 mediaRecorder 来录制我的屏幕并将其插入前端 page.There 没问题,视频在前端工作得很好
const blob = new Blob(chunks, { type: "video/mp4;" });
const savedVideo = document.getElementById("savedVideo");
chunks = [];
const videoURL = window.URL.createObjectURL(blob);
savedVideo.src = videoURL;
var tracks = stream.getTracks();
tracks[0].stop();
let response = await fetch('http://localhost:3001/upload', {
method: 'POST',
headers: {
'Content-Type': 'application/octet-stream',
},
body: blob
});
当我将 blob 发送到 server.I 想要保存视频时出现问题(仅在服务器端)我想问题出在服务器端处理 blob 上,也许我做错了,这里是我的服务器代码:
const express = require("express");
const cors = require('cors');
const fs = require('fs');
const app = express();
const port = 3001;
app.use(cors({
origin: 'http://localhost:3000'
}));
app.post("/upload", (req, res) => {
console.log('req.body', req.body)
req.on('readable', function(){
const data = req.read();
if(data) {
fs.createWriteStream('videeoo.mp4').write(data);
// also i didnt sure about this method to write file
}
console.log('data', data);
});
});
app.listen(port, () => {
console.log(`Server started at http://localhost:${port}`);
});
express logs
我正在等待您的最佳实践)谢谢!
嗯...这是有问题的...req.read()
通常不处理二进制数据。这里还有一个概念性问题:视频可能很大,但在您的应用程序中,您在开始编写之前等待整个文件上传。所以如果你有 10 个用户,每个用户上传 10GB 的文件,这就是一个问题。所以你真的想在文件到达时存储它,这样你一次只在内存中保留几个字节......但是如果你想限制文件的大小怎么办?您可能不想处理 10GB 的文件?
所以...确实有很多极端情况和需要考虑的事情。通常,您不想手动处理这些事情。幸运的是,像 multer
这样的库可以为您处理所有这些问题:https://expressjs.com/en/resources/middleware/multer.html 您只需定义目标目录、最大文件大小等,库就会为您处理所有事情
我有 google 扩展、React 前端应用程序和快速服务器。 我使用 mediaRecorder 来录制我的屏幕并将其插入前端 page.There 没问题,视频在前端工作得很好
const blob = new Blob(chunks, { type: "video/mp4;" });
const savedVideo = document.getElementById("savedVideo");
chunks = [];
const videoURL = window.URL.createObjectURL(blob);
savedVideo.src = videoURL;
var tracks = stream.getTracks();
tracks[0].stop();
let response = await fetch('http://localhost:3001/upload', {
method: 'POST',
headers: {
'Content-Type': 'application/octet-stream',
},
body: blob
});
当我将 blob 发送到 server.I 想要保存视频时出现问题(仅在服务器端)我想问题出在服务器端处理 blob 上,也许我做错了,这里是我的服务器代码:
const express = require("express");
const cors = require('cors');
const fs = require('fs');
const app = express();
const port = 3001;
app.use(cors({
origin: 'http://localhost:3000'
}));
app.post("/upload", (req, res) => {
console.log('req.body', req.body)
req.on('readable', function(){
const data = req.read();
if(data) {
fs.createWriteStream('videeoo.mp4').write(data);
// also i didnt sure about this method to write file
}
console.log('data', data);
});
});
app.listen(port, () => {
console.log(`Server started at http://localhost:${port}`);
});
express logs
我正在等待您的最佳实践)谢谢!
嗯...这是有问题的...req.read()
通常不处理二进制数据。这里还有一个概念性问题:视频可能很大,但在您的应用程序中,您在开始编写之前等待整个文件上传。所以如果你有 10 个用户,每个用户上传 10GB 的文件,这就是一个问题。所以你真的想在文件到达时存储它,这样你一次只在内存中保留几个字节......但是如果你想限制文件的大小怎么办?您可能不想处理 10GB 的文件?
所以...确实有很多极端情况和需要考虑的事情。通常,您不想手动处理这些事情。幸运的是,像 multer
这样的库可以为您处理所有这些问题:https://expressjs.com/en/resources/middleware/multer.html 您只需定义目标目录、最大文件大小等,库就会为您处理所有事情