2012-10-29 20 views
5

Düğüm sonrası modülü kullanarak küçük bir dosyayı postgres'e (db) kaydetmeye çalışıyorum. Bunu yapmak için bytea veri türünü kullanmam gerektiğini anlıyorum. db dosya sütununPost-postgres kullanarak postgres'te bir dosyanın saklanması

fs.readFile path, (err, data) -> 
    client.query 'UPDATE file_table SET file = $1 WHERE key = $2', [data, key], (e, result) -> 
    .... 

içindekiler ise: \ x ve hiçbir şey saklanır ben gibi bazı şeyi yaptığında yaşıyorum sorundur. Veri arabelleğini hex.e. data.toString ('hex') olarak değiştirirseniz, dosya saklanır ancak dosyayı geri okurken tüm formatlar kaybolur.

Post-postgres modülünü kullanarak bir dosyayı postgres içine saklamanın doğru yolu nedir?

+1

burada yardımcı takılan alır verileri incelemek ne olacak veri psql kullanarak temel. Orada doğru olup olmadığını gör. Sorun, verilerin doğru bir şekilde yerleştirilmesiyle mi yoksa tekrar okunmasıyla mı ilgili olduğunu size söyleyecektir. Ayrıca Pg versiyonundan bahsetmelisiniz; varsayılan "bytea" biçimi, 9.0'da "escape" dan 'hex' olarak değiştirildi. –

+1

Ne 'node-postgres' sürümünü kullanıyorsunuz? Yaklaşık bir yıl önce bytea'yı destekliyor gibi görünüyor (https://github.com/brianc/node-postgres/pull/38) böylece sadece bir arabelleğe geçebilmelisiniz. –

+0

Yorumlar için teşekkürler. Node-postgres v. 0.8.6 kullanıyorum ve Heroku'nun kullandığı postgres sürümü. Muhtemelen 9. bir şey. Db'ye baktım ve veri sütunundaki tek veri bir \ x. Alanı bir metin alanına dönüştürerek ve dosyayı bir hex dizesi olarak saklayarak bir iş buldum. Bunun iyi bir fikir olduğunu düşünmüyorum. – Clive

cevap

12

Hile, heks olarak kodlamak ve dosyayı \ x ile eklemektir.

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

Ben postgres 9.2.2 üzerinde diskten bir resimde okumak yaptıklarını ve 0.8.16 hem de nod node.js: Bu vazgeçme Okuma gerçekten bir tampon döndüren parseByteA yoluyla desteklenmektedir postgres (npm paket = 'pg') 0.11.2:

 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); 
     }); 
     }); 

ve ne geri dışarı yazmak için yaptım

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}); 
    }); 
}); 
İlgili konular