如何在 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 您只需定义目标目录、最大文件大小等,库就会为您处理所有事情