当前位置: 首页 > 面试题库 >

将缓冲区从ReadStream更改为实际文件

董鸣
2023-03-14
问题内容

所以我有这段代码:

downloadFile(file_id) {
    return new Promise((resolve, reject) => {
        var mongoose = require('mongoose');
        var Grid = require('gridfs-stream');
        var fs = require('fs');

        mongoose.connect(config.db, {useNewUrlParser: true},).catch(e => console.log(e));
        var conn = mongoose.connection;
        Grid.mongo = mongoose.mongo;
        var gfs = Grid(conn.db);
        console.log('downloadfile', file_id);
        var read_stream = gfs.createReadStream({_id: file_id});
        let file = [];
        read_stream.on('data', function (chunk) {
            file.push(chunk);
        });
        read_stream.on('error', e => {
            console.log(e);
            reject(e);
        });
        return read_stream.on('end', function () {
            resolve(file);
        });
    });
}

我这样称呼它:

Account.findById(req.params._id)
    .then(async account => {
        const file = await functions.downloadFile(account.employer.logo);
        res.render('users/employer/booth', {
            title: 'Employer Booth',
            user: req.user,
            postings: postings,
            employer: account.employer,
            event: event,
            logo: logo,
        });
    });

如何将该文件保存到服务器并用作图像,或者仅将其发送到视图并在<img>标签中显示?

我试图做这样的事情:

read_stream.on('open', function () {
    var imgFile = fs.createWriteStream(`/public/images/logos/${file_id}.jpg`);
    var write_stream = read_stream.pipe(imgFile);
    read_stream.pipe(res);
});
read_stream.on('error', e => {
    console.log(e);
});

但这无法读取已保存的文件,并且文件也未保存在任何地方。


问题答案:

好的,这挽救了我的生命:https :
//youtu.be/pXHOF4GWuZQ。这是最终代码:

downloadFile(file_id) {
    return new Promise((resolve, reject) => {
        var mongoose = require('mongoose');
        var Grid = require('gridfs-stream');
        var fs = require('fs');

        mongoose.connect(config.db, {useNewUrlParser: true},).catch(e => console.log(e));
        var conn = mongoose.connection;
        Grid.mongo = mongoose.mongo;
        var gfs = Grid(conn.db);
        console.log('downloadfile', file_id);
        var read_stream = gfs.createReadStream({_id: file_id});
        let file = [];
        read_stream.on('data', function (chunk) {
            file.push(chunk);
        });
        read_stream.on('error', e => {
            console.log(e);
            reject(e);
        });
        return read_stream.on('end', function () {
            file = Buffer.concat(file);
            const img = `data:image/png;base64,${Buffer(file).toString('base64')}`;
            resolve(img);
        });
    });
}


 类似资料:
  • 我不小心安装了3.0.0版,我的大多数文件自然产生了大量错误。现在我想把它带回2.6.1。我已经下载了2.6.1并安装了,但是当我做时,它仍然显示,这是错误的。 有办法将版本设置为2.6.1还是有办法卸载3.0.0?

  • 我有一个JSON对象,我正在将它转换成一个,并在这里进行一些处理。稍后,我想将相同的缓冲区数据转换为有效的JSON对象。 我的工作节点V6.9.1 下面是我尝试过的代码,但当我转换回JSON并且无法打开此对象时,我得到了。 所以我试着用检查的方式打印整个物体 如果我试着像数组一样读取它 我试图解析它也抛出SynTaxError:意外令牌o在JSON在位置2 我需要像我创建的那样将其视为真实对象(我

  • 我正在使用JOGL,但这个问题一般适用于OpenGL。似乎存在类似的问题,但它们要么针对GLSL代码,要么与复制帧缓冲区的内容有关,要么是一般建议-使用帧缓冲区对象,而不是。 我正在做一些阴影映射。如何使用帧缓冲对象将深度通道直接渲染到纹理? 能否请你贴一段初始化纹理和帧缓冲对象的代码,以及渲染场景前初始化一切的代码? 目前,我使用<code>glCopyTexSubImage2D<code>。我

  • 在Python脚本中,,我使用协议缓冲区使用以下方法来建模数据: 在. proto文件中定义消息格式。 使用协议缓冲区编译器。 使用Python协议缓冲区API在. py模块中写入和读取消息。 我想在appengine上实现Cloud Endpoints框架,该框架导入,并使用前面提到的Python脚本,但是Cloud Endpoints使用ProtoRPC,而不是“标准”协议缓冲区。 我的App

  • 本文向大家介绍emacs 文件和缓冲区,包括了emacs 文件和缓冲区的使用技巧和注意事项,需要的朋友参考一下 示例 在Emacs中,文件的含义与操作系统中的含义相同,并且用于永久存储数据。甲缓冲器是正在编辑的文件的内部表示。可以使用将文件读取到缓冲区中C-x C-f,并且可以使用C-x C-s(将文件保存到当前位置)或C-x C-w(将文件写入其他位置,提示输入-等效于Save as)将缓冲区写

  • 如何更改仍为3M的缓冲区 当前启动命令: ffmpeg-f dshow-i video=“屏幕捕获录像机”-vcodec libx264-预设:v ultrafast-过滤器:v“crop=480:270:0:0”-vf tpad=start_duration=30-r 30-g 60-keyint_min 60-sc_阈值0-b:v 1G-最大速率2500k-bufsize 1G-rtbufsi