[英]how to get a picture from a postgresql database
我想选择一个在postgresql数据库中保存为大对象的图片。
我知道我使用lo_export来做到这一点。
但有一个问题:我想将这张图片直接保存到我的电脑,因为我无法使用lo_export访问保存在服务器上的文件
(我认为如果通过选择查询将图片传输到我的电脑,这对我来说是最好的)
我并不完全了解C#,但是Npgsql手册有一个类似于将bytea
列写入文件的示例:
command = new NpgsqlCommand("select blob from t where id = 1);", conn);
Byte[] result = (Byte[])command.ExecuteScalar();
FileStream fs = new FileStream(args[0] + "database", FileMode.Create, FileAccess.Write);
BinaryWriter bw = new BinaryWriter(new BufferedStream(fs));
bw.Write(result);
bw.Flush();
fs.Close();
bw.Close();
所以你只需要从数据库中读取它就像任何其他列一样,并将其写入本地文件。 这个例子大约是我链接到的页面的一半,只是搜索“bytea”,你会发现它。
更新 :对于大型对象,该过程似乎相似但SQL-ish较少。 手册(如上所述)包括一些大对象示例:
NpgsqlTransaction t = Polacz.BeginTransaction();
LargeObjectManager lbm = new LargeObjectManager(Polacz);
LargeObject lo = lbm.Open(takeOID(idtowaru),LargeObjectManager.READWRITE); //take picture oid from metod takeOID
byte[] buf = new byte[lo.Size()];
buf = lo.Read(lo.Size());
MemoryStream ms = new MemoryStream();
ms.Write(buf,0,lo.Size());
// ...
Image zdjecie = Image.FromStream(ms);
在手册中搜索“大对象”,你会发现它。
不熟悉C#但是如果你有贡献/ dblink并且更好地访问单独的postgresql服务器,这可能有效:
如果您的图片不超过1GB(或者您不能仅访问部分字节),那么使用bytea
是存储它们的更好选择。
许多SQL GUI工具允许直接下载(甚至查看)bytea列的内容
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.