如何在express(nodejs)中处理blob
Posted
技术标签:
【中文标题】如何在express(nodejs)中处理blob【英文标题】:How to handle blob in express(nodejs) 【发布时间】: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!
【问题讨论】:
【参考方案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/…以上是关于如何在express(nodejs)中处理blob的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Express 和 NodeJS 中针对 Mongoose 错误进行错误处理。
我想通过 NodeJS Express 应用程序将 Azure blob 存储与 Angular 应用程序连接起来
NodeJS/Express 如何同时处理多个 CPU 绑定请求
nodejs / express:如何使用数据发布到外部表单?