嗨: 在我的应用程序中,我有一些图像保存在数据库中,所以我创建了一个ImgDownLoad.aspx来检索图像并重新调用它们,因为图像在该数据库可以非常大(他们中的一些是20M以上),所以我产生一些缩略图,这是代码:从数据库加载大图像并将其返回给客户端
page_load(){
string id=Requset.QueryString["id"];
string imgtype=Requset.Querystring["itype"];
if(imgType=="small")
{
//request the thumbnail
string small_loaction=getSmallLocationById(id);
if(!File.exists(small_location)
{
byte[] img_stream =getStreamFromDb(id);
Image img=Image.frameStream(new MemsorStream(img_steam));//here,I often get the out of memory error,but I am not sure when it will happen.
generateSmallImage(img,location)
}
Response.TransferFile(small_location);
}
else if(imgType=="large"){
byte[] img_stream =getStreamFromDb(id);
new MemorySteam(img_stream).writeTo(Response.outputstream);
}
}
什么不对?
而且,因为我不知道的图像格式,所以我不能添加
Response.contenttype="image/xxx";
什么最令人困惑的是,我会遇到内存不足的错误,所以我更改代码:
try{
byte[] img_stream =getStreamFromDb(id);
Image img=Image.frameStream(new MemsorStream(img_steam));//here,I often get the out of memory error,but I am not sure when it will happen.
generateSmallImage(img,location)
}
catche(exceptin e){
//the small image can not generated,just return the whole image
new MemorySteam(img_stream).writeTo(Response.outputstream);
return;
}
在这种情况下,我会避免内存不足的问题,但某些大型图像无法在某个时间下载。
所以我想知道是否有任何方法来处理大图像流?
取一大图像〔实施例:
resolution:12590x4000
size:26M.
事实上,我已经开了一个大的图像(几乎24M)与MSPAINT,然后再保存图像,我发现它的尺寸要小得多比起初。那么是否有可能在服务器端调整图像大小?或者其他好礼貌来解决我的问题?
感谢您的关注。实际上,我将它们放置在“generateSmallImage”方法中。我做了缓存,我将缩略图保存在一个文件夹中,当我请求图像下载请求时,我会检查这个缓存文件是否存在,如果是的话,返回它,如果不生成小图像,如果生成小图像失败,我会重新渲染整个图像流到客户端。此外,我只是读取数据库的访问权限,数据库的所有者是其他人。 – hguser 2011-05-19 13:29:42
感谢您的编码,事实上,我是新的C#,我以前使用Java之前,所以我从来没有使用“使用VAR”字。 – hguser 2011-05-19 13:41:46