2011-07-29 107 views
2

我试图用linq将图像保存到sql-server。我将字段类型设置为图像,在我的应用程序中,我使用fileupload控制器以byte []形式读取图像文件。问题在于,当我评估图像字段时,无法将byte []转换为二进制。你认为这是保存图像的好方法吗?如何使用linq将图像保存到sql-server?

我的代码:

Stream imgStream = FileUpload1.PostedFile.InputStream; 
int imglen = FileUpload1.PostedFile.ContentLength; 
string imgContentType = FileUpload1.PostedFile.ContentType; 
string imgName = FileUpload1.PostedFile.FileName; 
byte[] imgBinaryData = new byte[imglen]; 
int n = imgStream.Read(imgBinaryData, 0, imglen); 
ImgStore info = new ImgStore(); 
info.pic = imgBinaryData;// it cannot implictly convert type 'byte[]' to Linq.Binary 
info.type = imgContentType; 
info.fileName = imgName; 
+0

我的2美分,你应该保存的路径不是图像。保存图像可能会导致您的数据库非常快速地变大并降低性能。 – Tony

回答

3

使用LINQ存储图像将是非常低效的,因为所有的API需要至少一个完整的存储器内的字节数组图像尺寸的。即使在中等负载情况下,随着内存在虚假的大阵列副本中耗尽,这种情况也会迅速消失。我建议您使用流式传输语义,避免传入和传出大字节数组到ADO.Net API的问题。请参阅这两篇文章以获取完整的工作代码,该代码将HTTP POST上传的文件作为流并以缓冲流(chuncked)方式将其传输到数据库中,并以类似的方式将映像从数据库传输到HTTP响应:

的代码也可在CodeProject

相关问题