【问题标题】:How to handle blob in express(nodejs)如何在express(nodejs)中处理blob
【发布时间】:2021-11-26 02:11:51
【问题描述】:

我有谷歌扩展、反应前端应用和快速服务器。 我使用 mediaRecorder 录制屏幕并将其插入前端页面。没有问题,视频在前端工作正常

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 发送到服务器时,问题就开始了。我想保存视频(仅在服务器端)我想问题是在服务器端处理 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

我在等待你的最佳实践)Grasias!

【问题讨论】:

    标签: node.js express google-chrome-extension blob


    【解决方案1】:

    嗯...这是有问题的...req.read() 通常不处理二进制数据。这里还有一个概念问题:视频可能很大,但在您的应用程序中,您在开始编写之前等待整个文件上传。所以如果你有 10 个用户,每个用户上传 10GB 的文件,这是一个问题。所以你真的想在文件到达时存储它,这样你一次只能在内存中保留几个字节......但是如果你想限制文件的大小怎么办?大概 10GB 的文件不是你想要处理的?

    所以...确实有很多极端情况和需要考虑的事情。通常,您不想手动处理这些事情。幸运的是,有像 multer 这样的库可以为您处理所有这些问题:https://expressjs.com/en/resources/middleware/multer.html 您只需定义目标目录、最大文件大小等,该库会为您处理所有事情

    【讨论】:

    • 我需要先发送到后端,然后再发送到s3。所以你说我需要将文件保存在后端文件夹中,对吗?谢谢回复)
    • 不!你之前没有提到S3。这不是您使用 S3 的方式! AWS S3(以及与此相关的所有对象存储,无论您使用哪种云)都有一种非常具体的方式来处理文件上传。该文件根本不应该通过您的服务器。您需要的是 1. 用户向您的后端发送请求,说他想上传大小为 A 字节、名称 B 等的特定文件,2. 后端生成预签名的 S3 URL(一个特殊的 URL,如果仅适用于此特定大小的特定文件名仅在接下来的几分钟内),并且用户将文件上传到该 URL
    • 更多信息在这里:aws.amazon.com/blogs/developer/…
    猜你喜欢
    • 2016-05-26
    • 2021-02-19
    • 1970-01-01
    • 2015-02-15
    • 1970-01-01
    • 2016-08-04
    • 2018-11-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多