上传,重命名和调整图像大小时出现ASP.NET错误
问题描述:
下午,我试图使用asp.net FileUpload控件上传文件。在保存图像之前,我需要使用用户GUID重命名文件,然后将图像大小调整为128像素。上传,重命名和调整图像大小时出现ASP.NET错误
但是,当它去保存我收到错误在GDI +发生了一般性错误。和我不能解决如何得到这个排序。
可能有人在看我的代码,并提供一些指导,请
protected void btnUpload_Click(object sender, EventArgs e)
{
Guid userGuid = (Guid)Membership.GetUser().ProviderUserKey;
string directory = Server.MapPath("imgs/users");
string fileExt = Path.GetExtension(fuSample.PostedFile.FileName);
string fileName = userGuid + fileExt;
//Check File ext, make sure its an image!
if (fileExt == ".jpeg" || fileExt == ".jpg" || fileExt == ".png" || fileExt == ".gif")
{
//Now we check to make sure its less than 600kb
if (fuSample.PostedFile.ContentLength < 614400)
{
//Delete an existing file.
if (File.Exists(directory + fileName))
File.Delete(directory + fileName);
// Create a bitmap of the content of the fileUpload control in memory
Bitmap originalBMP = new Bitmap(fuSample.FileContent);
// Calculate the new image dimensions
int origWidth = originalBMP.Width;
int origHeight = originalBMP.Height;
int sngRatio = origWidth/origHeight;
int newWidth = 128;
int newHeight = newWidth/sngRatio;
// Create a new bitmap which will hold the previous resized bitmap
Bitmap newBMP = new Bitmap(originalBMP, newWidth, newHeight);
// Create a graphic based on the new bitmap
Graphics oGraphics = Graphics.FromImage(newBMP);
// Set the properties for the new graphic file
oGraphics.SmoothingMode = SmoothingMode.AntiAlias; oGraphics.InterpolationMode = InterpolationMode.HighQualityBicubic;
// Draw the new graphic based on the resized bitmap
oGraphics.DrawImage(originalBMP, 0, 0, newWidth, newHeight);
// Save the new graphic file to the server
newBMP.Save(directory + fileName);
// Once finished with the bitmap objects, we deallocate them.
originalBMP.Dispose();
newBMP.Dispose();
oGraphics.Dispose();
//Success!
}
else
{
//error here, img too big
}
}
else
{
notifybar.Attributes.Add("style", "display:block;");
notifybar.Attributes.Add("class", "failed");
notifyText.Text = "Valid Image files only please! (.png, .jpg, .jpeg, or .gif)";
}
}
答
它可以像一个文件覆盖冲突这样简单的事情。然而,这段代码有许多危险的错误,并且它不是非常有效地使用RAM。
我会建议不同的方法(使用ImageResizer
NuGet包):
var j = new ImageJob(fuSample,"~/imgs/users/<guid>.<ext>",
new ResizeSettings("maxwidth=128;maxheight=128"));
j.Build();
string imageUrl = PathUtils.GuessVirtualPath(j.FinalPath)