在客户端从MariaDB下载Blob pdf

时间:2018-07-02 22:02:53

标签: javascript mysql node.js blob mariadb

大家晚上好

我手动将.pdf文件上传到我的mariaDB。我想让我的客户直接下载它。这是我的操作方法:

1)通过phpMyAdmin(带有utf-8bin编码的数据库)以longblob类型上传文件。
2)通过AJAX GET调用从数据库获取blob。
3)像这样处理获得的斑点:

handleResponse(evt) {
  if (evt.detail.url.includes('/getPDF/')) {
    this.save("cahier_de_bord.pdf", evt.detail.response[0].file);
    console.log( evt.detail.response[0].file);

  }
}
save(filename, data) {
  var blob = new Blob([data], {
    type: 'application/pdf'
  });
  if (window.navigator.msSaveOrOpenBlob) {
    window.navigator.msSaveBlob(blob, filename);
  } else {
    var elem = window.document.createElement('a');
    elem.href = window.URL.createObjectURL(blob);
    elem.download = filename;
    document.body.appendChild(elem);
    elem.click();
    document.body.removeChild(elem);
  }
}

它实际上下载了文件,但无法读取它:在Firefox中出现“无法加载PDF”错误。
顺便说一下,这是如何从我的nodejs服务器发送它的:

app.get('/getPDF/:id', function (req, res) {
    maria.getPDF(req.params.id, function (err, data) {
        if (err) {
            res.status(400).send(err).end();
        } else {
            // console.log(data[0].file);
            res.status(200).send(data).end();
        }
    });
});

//And here is the query 
exports.getPDF = function (id, callback) {
    var c = init(process.env.B_PDF);

    var query = 'SELECT file FROM pdf WHERE id_Mission = ' + id + ';';
    c.query(query, function (err, res) {
        if (err) {
            c.end();
            callback(err, null);
        } else {
            c.end();
            callback(null, res);
        }
    });
}

当我从phpMyAdmin手动下载它时,它以“ pdf-file.bin”下载,当强制将其扩展为.pdf并打开文件时,它运行良好。我在这里做错什么了吗?

谢谢大家,

NeitoFR

0 个答案:

没有答案