在SQP.NET中上传图像的有效方法

时间:2014-02-10 16:36:43

标签: c# asp.net razor

我仍在使用c#和Webmatrix学习ASP.NET。我已经组建了一个摄影比赛网站,但是找不到上传图片的理想方式。我没有看到上传大于1200x900(投影仪最大分辨率)的图像,所以要确保图像尽可能小。

我正在使用标签并检查图像大小。如果它太大我在保存时使用'ImageResizer'来调整图像大小。我知道检查大小的唯一方法是使用System.Drawing.Image将'HttpPostedFileBase'文件转换为图像。但是当图像是36M像素(它是一个摄影俱乐部)时,这需要一个年龄来阅读高度和宽度属性。我可以只加载前x个字节来读取属性,还是我必须读取整个图像?

我转换为图像的第二个原因是提取exif数据。再次有一种更简单,更快捷的方式来读取exif数据吗?

我希望我的问题有道理,这对我来说有点新鲜。

简化代码:

HttpPostedFileBase uploadedFile = Request.Files[0];

using (System.Drawing.Image image = System.Drawing.Image.FromStream(uploadedFile.InputStream, true, true))

{

string Exif;

System.Text.ASCIIEncoding encoding = new System.Text.ASCIIEncoding();

try{

Exif = encoding.GetString(image.GetPropertyItem(36867).Value);

}

catch

{

Exif="";  

}

if (image.Width <Convert.ToInt32(MaxWidth) && image.Height <Convert.ToInt32(MaxHeight))

{

// SAVE IMAGE AS IS

image.Save(fileSavePath);

// LOAD IMAGE DETAILS WITH EXIF

db.Execute("INSERT INTO CompImages (ImageTitle,CompID,GroupID,ClubID,FileName,UserID,ExifDate) VALUES(@0,@1,@2,@3,@4,@5,@6)",ImageTitle,CompID,GroupID,ClubID,fileName,WebSecurity.CurrentUserId,DateTaken);

}

else           

{

// LOAD IMAGE DETAILS WITH EXIF

db.Execute("INSERT INTO CompImages (ImageTitle,CompID,GroupID,ClubID,FileName,UserID,ExifDate) VALUES(@0,@1,@2,@3,@4,@5,@6)",ImageTitle,CompID,GroupID,ClubID,fileName,WebSecurity.CurrentUserId,DateTaken);

// RESIZE IMAGE

ImageResizer.ImageJob iF = new ImageResizer.ImageJob(image, "~/UpImages/"+CompID+"/"+fileName, new ImageResizer.ResizeSettings( 
          "width="+MaxWidth+";height="+MaxHeight+";format=jpg;mode=max"));

iF.CreateParentDirectory = true; //自动创建uploads目录。   iF.Build();

}

}

1 个答案:

答案 0 :(得分:0)

  

我知道检查大小的唯一方法是转换   使用System.Drawing.Image将'HttpPostedFileBase'文件转换为图像。

您也可以直接结帐ContentLength财产:

int uploadedFileSize = uploadedFile.ContentLength;
  

我转换为图像的第二个原因是提取exif   数据。再次有一种更简单,更快捷的方式来读取exif数据吗?

我不知道BCL中的内置类允许您在不将图像加载到内存中的情况下读取EXIF信息,但您可以使用像这样的第三方库:http://www.codeproject.com/Articles/36342/ExifLib-A-Fast-Exif-Data-Extractor-for-NET-2-0