【问题标题】:How to download images from the database?如何从数据库中下载图像?
【发布时间】:2019-10-02 13:30:22
【问题描述】:

我需要在数据库中上传不超过 2 兆字节的文件和图像。但是下载图片有问题。所有下载的图像都会中断并且无法打开。文本文件没有这样的问题。

图片下载结果:

文件 2.png

2.png: data

以这种方式上传图片:

module.exports.upload = async function (req, res) {
  const sysFileObj = {
    COMMENTS: req.body.COMMENTS,
    NAME: req.file.originalname,
    MIMETYPE: req.file.mimetype,
    FILE_CONTENT: req.file.buffer
  };
  try {
    await SysFiles.create(sysFileObj);
    res.status(201).json(sysFileObj);
  } catch (e) {
    errorHandler(res, e);
  }
};

穆特:

const multer = require('multer');

const storage = multer.memoryStorage()

let obj = {
    storage: storage,
    limits: {
        fileSize: 1024 * 1024 * 2 
    }
};

var upload = multer(obj)

module.exports = upload;

这里下载的时候有问题:

module.exports.download = async function (req, res) {
  try {
    let sysFile = await SysFiles.findById(req.params.SYSFILE_ID);
    var fileContents = Buffer.from(sysFile._props.FILE_CONTENT);
    var readStream = new stream.PassThrough();
    readStream.end(fileContents);
    res.set('Content-disposition', 'attachment; filename=' + sysFile._props.NAME);
    res.set('Content-Type', sysFile._props.MIMETYPE);
    readStream.pipe(res);
  } catch (e) {
    errorHandler(res, e);
  }
};

我做错了什么?请告诉我。我必须马上说,我需要将图像上传到数据库,而不需要任何指向将存储图像的任何文件夹的链接。

注意:

但是,顺便说一下,当我使用“SQL”下载上传的图像时 开发者”,图像打开没有任何问题。

【问题讨论】:

  • 你的错误信息是什么?
  • @SándorBakos Fatal error reading PNG image file not a PNG file
  • 你在用mongodb吗?如果是真的,我认为你必须将FILE_CONTENT保存为二进制数据,让我们尝试使用FILE_CONTENT: mongo.Binary(req.file.buffer)而不是FILE_CONTENT: req.file.buffer
  • @hoangdv 不,我正在使用 oracledb + oracle-sage
  • 我会检查 oracle 中的行是否包含我的文件。我会使用一些可以将文件导出到文件系统的客户端,并首先检查它是否可以在本地打开。如果是,您至少可以排除问题与上传有关。我的另一个赌注是提到@hoangdv,也许值得检查/共享表格DDL。

标签: node.js express multer


【解决方案1】:

您必须存储图像内容类型 和图像数据

const formidable  = require('formidable');
const _  = require('lodash');
const fs = require('fs');
// loading formidable library
let form = new formidable.IncomingForm();
// taking file extension
form.keepExtensions = true;
//processing for upload image
form.parse(request_data,(err,fields,files) => {
    //if error when uploading image
    if (err) {
        return res.status(400).json({
            err: 'Image could not bd uploaded'
        })
    }
    // validating all fields without image
    const {name, description, price, category, quantity, shipping} = fields;
    if(!name || !description || !price || !category || !quantity || !shipping) {
        return res.status(400).json({
            err: 'All Fields are required'
        })
    }
    // lets continue when there are no error
    // form have available photo
    if(files.photo){
        //1 kb = 1000
        //1 MB = 1000000
        // check image size
        if(files.photo.size > 2000000){
            return res.status(400).json({
                err: 'Image should be less than 2 MB'
            })
        }
        // there are no error found then execute it
        TAKING_AS_YOUR_VALRIABLE.data = fs.readFileSync(files.photo.path);
        TAKING_AS_YOUR_VALRIABLE.contentType = files.photo.type
    }
    // finaly save product
    //save it your own way

    const FINAL_DATA = {...fields,...TAKING_AS_YOUR_VALRIABLE}
})

现在显示照片代码

if(TAKING_AS_YOUR_VALRIABLE.data){
    res.set('Content-Type',TAKING_AS_YOUR_VALRIABLE.contentType);
    res.send(TAKING_AS_YOUR_VALRIABLE.data);
}

【讨论】:

  • 我什么都不懂,但这对我下载图像有什么帮助?这个和multer中安装的一样
猜你喜欢
  • 1970-01-01
  • 2015-01-10
  • 2019-12-28
  • 2017-05-20
  • 2015-12-02
  • 2019-05-25
  • 1970-01-01
  • 2017-01-14
  • 1970-01-01
相关资源
最近更新 更多