node.js - 如何在 NodeJS 中创建视频 URL Blob?

标签 node.js video xmlhttprequest blob filereader

你能帮我在 NodeJS 中创建一个视频 URL Blob 吗?

    var xhr = new XMLHttpRequest();
    xhr.responseType = 'blob';

    xhr.onload = function() {
        var reader = new FileReader();

        reader.onloadend = function() {
            var byteCharacters = atob(reader.result.slice(reader.result.indexOf(',') + 1));

            var byteNumbers = new Array(byteCharacters.length);

            for (var i = 0; i < byteCharacters.length; i++) {
                byteNumbers[i] = byteCharacters.charCodeAt(i);
            }

            var byteArray = new Uint8Array(byteNumbers);
            var blob = new Blob([ byteArray ], { type: 'video/ogg' });
            var url = URL.createObjectURL(blob);

            console.log(url);
        };

        reader.readAsDataURL(xhr.response);
    };

    xhr.open(
        'GET',
        '...Video URL...'
    );
    xhr.send();

错误输出:

  throw new Error('cannot read as File: ' + JSON.stringify(file));   
  Error: cannot read as File: undefined

我使用了 XMLHttpRequest、URL、FileReader 和 Blob 包

请帮忙,谢谢

最佳答案

Node.JS 没有 XMLHttpRequestFileReaderBlob 等。而是使用 fs , http模块和其他内置类,例如 Buffer

尝试在服务器上使用这些浏览器功能,即使使用尝试模拟它们的包,也可能并不总是有效。事实上,许多模拟这些功能的库并不包含所有内容。例如,xmlhttprequest Node 包不使用.response,而仅使用文本响应。

在 Node.JS 中,不需要 blob URL(您甚至会在哪里使用它?),您只需直接与 Buffer 交互即可。

// making a http request to fetch something
const http = require("https");

const request = https.request({
  method: "GET",
  url: "https://example.com/video.ogg"
}, (res) => {
  const chunks = [];

  res.on("data", (chunk) => {
    chunks.push(chunk);
  });

  res.on("end", () => {
    // raw byte data
    const buffer = Buffer.concat(chunks);

    /*
     * Interact with Buffer here
     */

  });
});

request.end();

关于node.js - 如何在 NodeJS 中创建视频 URL Blob?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68917318/

相关文章:

http-headers - 拒绝获取不安全 header "Content-Range"

javascript - 在 mongoose 中按 _id 值范围选择文档

node.js - 在同一个表中的多个列上更新 Postgresql

javascript - NodeJS 中的嵌套回调和异常处理

javascript - 为什么我的 HTML POST 请求表单没有通过 Express app.post?如何将数字变量传递给另一个 POST 请求?

css - 在视频标签上放置一个按钮

javascript - 使用 Ajax 更改 div 的内部内容

ios - 使用 ffmpeg 将 Mp4 转为 HLS

actionscript-3 - 将YouTube channel 嵌入Flash网站

jquery - 在发送下一个请求之前中止 ajax 请求? (jQuery)