首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用node-postgres在postgres中存储文件

使用node-postgres在postgres中存储文件
EN

Stack Overflow用户
提问于 2012-10-29 23:32:42
回答 1查看 18.1K关注 0票数 11

我正在尝试使用node-postgres模块将一个小文件存储到postgres数据库中。我知道我应该使用bytea数据类型来做这件事。我遇到的问题是,当我做一些事情时:

代码语言:javascript
复制
fs.readFile path, (err, data) ->
    client.query 'UPDATE file_table SET file = $1 WHERE key = $2', [data, key], (e, result) ->
    ....

db中file列的内容是:\x,并且不存储任何内容。如果我将数据缓冲区更改为十六进制,即data.toString(' hex '),文件将被存储,但当我读回该文件时,所有格式都会丢失。

使用node-postgres模块将文件存储到postgres的正确方式是什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-01-19 05:47:34

诀窍是编码为十六进制,并在文件前面加上\x。通过返回缓冲区的parseByteA确实支持读回它:

https://github.com/brianc/node-postgres/blob/master/lib/textParsers.js

下面是我从postgres 9.2.2、node.js 0.8.16和node-postgres (npm package='pg') 0.11.2上的磁盘读取镜像的过程:

代码语言:javascript
复制
      fs.readFile(loc_on_disk, 'hex', function(err, imgData) {
        console.log('imgData',imgData);
        imgData = '\\x' + imgData;
        app.pgClient.query('insert into image_table (image) values ($1)',
                           [imgData],
                           function(err, writeResult) {
          console.log('err',err,'pg writeResult',writeResult);
        });
      });

我做了什么把它写了出来

代码语言:javascript
复制
app.get('/url/to/get/', function(req, res, next) {
  app.pgClient.query('select image from image_table limit 1',
                     function(err, readResult) {
    console.log('err',err,'pg readResult',readResult);
    fs.writeFile('/tmp/foo.jpg', readResult.rows[0].image);
    res.json(200, {success: true});
  });
});
票数 17
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13124711

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档