我一直在处理图像gallary。当用户上传图片时,我现在检查文件的大小。如果它小于1MB,我检查该文件实际上是一种图像类型。最后,我将图像大小调整为合适的大小,并创建图像的小缩略图。不过,由于在代码中添加了检查我已经尝试过的类型和OutOfMemoryException。OutOfMemoryException C#上传图像文件
这里是我的控制器的方法:
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Upload(Image image, HttpPostedFileBase ImageFile)
{
if (ImageFile.ContentLength > 0)
{
// Get the size in bytes of the file to upload.
int fileSize = ImageFile.ContentLength;
// Allow only files less than 1,048,576 bytes (approximately 1 MB) to be uploaded.
if (fileSize < 1048576)
{
string fileclass = "";
using (BinaryReader r = new BinaryReader(ImageFile.InputStream))
{
byte buffer = r.ReadByte();
fileclass = buffer.ToString();
buffer = r.ReadByte();
fileclass += buffer.ToString();
r.Close();
}
switch (fileclass)
{
case "7137":
case "255216":
case "13780":
try
{
string path = Server.MapPath("~/Uploads/");
ImageFile.SaveAs(path + ImageFile.FileName);
ResizeImageHelper resizeImageHelper = new ResizeImageHelper();
resizeImageHelper.ResizeImage(path + ImageFile.FileName, path + ImageFile.FileName, 640, 480, false);
resizeImageHelper.ResizeImage(path + ImageFile.FileName, path + "thumb" + ImageFile.FileName, 74, 74, false);
image.imageLocation = ImageFile.FileName;
image.imageThumb = "thumb" + ImageFile.FileName;
imageRepository.Add(image);
imageRepository.Save();
return RedirectToAction("Index", "Home");
}
catch (Exception ex)
{
return View("Error");
}
}
}
else
{
//If file over 1MB
return View("Error");
}
}
else
{
//If file not uploaded
return View("Error");
}
return View("Error");
}
这里是调整大小的方法我用:
public void ResizeImage(string OriginalFile, string NewFile, int NewWidth, int MaxHeight, bool OnlyResizeIfWider)
{
System.Drawing.Image FullsizeImage = System.Drawing.Image.FromFile(OriginalFile);
// Prevent using images internal thumbnail
FullsizeImage.RotateFlip(System.Drawing.RotateFlipType.Rotate180FlipNone);
FullsizeImage.RotateFlip(System.Drawing.RotateFlipType.Rotate180FlipNone);
if (OnlyResizeIfWider)
{
if (FullsizeImage.Width <= NewWidth)
{
NewWidth = FullsizeImage.Width;
}
}
int NewHeight = FullsizeImage.Height * NewWidth/FullsizeImage.Width;
if (NewHeight > MaxHeight)
{
// Resize with height instead
NewWidth = FullsizeImage.Width * MaxHeight/FullsizeImage.Height;
NewHeight = MaxHeight;
}
System.Drawing.Image NewImage = FullsizeImage.GetThumbnailImage(NewWidth, NewHeight, null, IntPtr.Zero);
// Clear handle to original file so that we can overwrite it if necessary
FullsizeImage.Dispose();
// Save resized picture
NewImage.Save(NewFile);
}
任何人都可以建议本?我目前只是在玩周围试图学习新的东西:-)
感谢,
乔恩
进展我已经把范围缩小到该块,当注释掉的东西作为普通:
using (BinaryReader r = new BinaryReader(ImageFile.InputStream))
{
byte buffer = r.ReadByte();
fileclass = buffer.ToString();
buffer = r.ReadByte();
fileclass += buffer.ToString();
r.Close();
}
异常发生在哪里? – 2010-06-20 23:17:04
我刚刚发现它出现在这一行:System.Drawing.Image FullsizeImage = System.Drawing.Image.FromFile(OriginalFile); – 2010-06-20 23:18:23
但是,在我开始将所有检查都到位之前,这是工作的。 – 2010-06-20 23:18:41