当前位置: 首页 > 知识库问答 >
问题:

如何从节点提取调用获取原始文件数据?

姜景辉
2023-03-14

假设我有一个像https://someurl.com/myfile.mp4这样的endpoint。我想获取mp4文件,并将其原始数据插入到字符串中,以便计算整个文件内容的sha256。如何使用节点获取库执行此操作?我在互联网上找到的所有例子都假设从查询中返回一个json对象,是否总是这样,我应该使用另一个库?下面是一个示例代码:

let urlFinal = 'https://someurl.com/myfile.mp4';
let videoFile = await fetch(urlFinal, {method: 'GET'}).then(res => { return res.blob() });
console.log('videofile: ' + videoFile) // prints out: videofile: [object Blob]
console.log('videofile: ' + JSON.stringify(videoFile)) // prints out: videofile: {}
calculateHash(videoFile)

我也没有在留档中找到任何关于blob()函数和对象的内容。那么在这种情况下,达到文件数据的最简单方法是什么呢?提前感谢

共有1个答案

轩辕季同
2023-03-14

像这样下载内存中的视频原始内容:

const downloadNew = () => {
    http.get(urlFinal, (res) => {
        const { statusCode } = res;
        const contentType = res.headers['content-type'];

        let error;
        if (statusCode !== 200) {
            error = new Error('Request Failed.\n' +
                `Status Code: ${statusCode}`);
        } 
        
        if (error) {
            console.error(error.message);
            res.resume();
            return;
        }

        res.setEncoding('utf8');
        let rawData = '';
        res.on('data', (chunk) => { rawData += chunk; });
        res.on('end', () => {
            try {
                console.log(rawData);
            } catch (e) {
                console.error(e.message);
            }
        });
    }).on('error', (e) => {
        console.error(`Got error: ${e.message}`);
    });
}

您可以使用nodejs本地代码以及nodejs获取节点。我将演示在Nodejs中下载内容的两种方式(使用/不使用第三方Libs):

使用Node-Fetch库下载:

const http = require('http');
const fs = require('fs');
const urlFinal = 'http://commondatastorage.googleapis.com/gtv-videos-bucket/sample/BigBuckBunny.mp4';
const util = require("util");
const fetch = require("node-fetch");
const newFilePath = "/home/amulyakashyap/Desktop/download/BigBuckBunny.mp4";

const downloadUsingFetch => ()=>{
  fetch(urlFinal)
      .then(res => {
          const dest = fs.createWriteStream(newFilePath);
          res.body.pipe(dest);
      }).then(()=>console.log("finished"))
      .catch(console.error);
  }

使用本机Nodejs下载(不支持第三方Lib):

const downloadUsingNative = function(cb) {
  let file = fs.createWriteStream(newFilePath);
  let request = http.get(urlFinal, function(response) {
    response.pipe(file);
    file.on('finish', function() {
     console.log("done")
      file.close(cb);

    });
  }).on('error', function(err) {
    fs.unlink(dest);
    if (cb) cb(err.message);
  });
};

const downloadUsingNativePromisified = util.promisify(downloadUsingNative);

downloadUsingNativePromisified().then(console.log).catch(console.error);

如果它对你有用。请对答案投赞成票。

 类似资料:
  • 问题内容: 我正在尝试从文件夹中包含在项目中的原始文件获取。但是无论如何,我都会得到一个。 该文件是一个文件,也尝试过使用,也不起作用。使用DOES 播放两个文件都可以。 的回报: 我的代码: 错误: 问题答案: 尝试这种方法,用作您的inputStream。沿着这个地方: 返回一个InputStream 编辑:如果您使用上述方法,请删除这些代码 希望这有帮助,祝你好运!^^

  • 我能够通过IMAP连接到Gmail并进行解析,但是在电子邮件正文中,我获得了Gmail特定的内容,例如

  • 我有一些pdf文件,使用pdfbox我已经将它们转换为文本并存储到文本文件中,现在我要从文本文件中删除它们 超链接 我希望按如下方式逐行获取有效文本: 我们提出了一种从纯文本中提取的多词概念词进行本体学习的方法OntoGain。OntoGain遵循一个由不同处理层定义的本体学习过程。在普通术语提取的基础上,通过对提取的概念进行聚类,形成概念层次结构。然后,衍生术语“分类法”将丰富非分类关系。已经研

  • 我在循环中的节点JS中发送这样的GET请求 由于响应是异步的,是否可以在响应中获取原始请求URL? 谢谢!

  • 问题内容: 我有一段这样的HTML: 我有一个与此HTML匹配的WebElement。如何从中仅提取“标题”?方法.getText()返回“ Title \ nAuthor”。 问题答案: 您无法在WebDriver API中执行此操作,而必须在代码中执行。例如: 请注意,结尾的换行符实际上是元素文本的一部分,因此,如果您不想要它,则需要将其删除。

  • 问题内容: 在我的应用程序中,我使用来显示一些日志信息。因为我想突出显示文本中的某些特定行(例如错误消息),所以将设置为“ ”。这样,我可以设置文本格式。 现在,我创建一个JButton,将其内容复制到剪贴板中。这部分很简单,但是我的问题是,当我调用时,我得到了HTML代码,例如: 而不是只获取原始内容: 有没有办法只获取纯文本格式的内容?还是我需要自己将HTML转换为原始文本? 问题答案: 基于