2010-03-12 43 views
6

Tôi có một chức năng mà lần đầu tiên đọc một hình ảnh từ đĩa, thay đổi kích thước nó và sau đó lưu vào một thư mục khác.Lỗi ASP.NET trên Bitmap.Save "Ngoại lệ (0x80004005): Đã xảy ra lỗi chung trong GDI +".

khi tôi sử dụng Bitmap.Save (thư mục + theimagename), nó trả về lỗi như tôi đã nêu trong tiêu đề câu hỏi.

tôi đã kiểm tra thư mục là đúng và tên hình ảnh đã cho không tồn tại trong thư mục đó.

điều kỳ lạ, là cùng một mã hoạt động tốt trên máy cục bộ. nhưng khi tôi tải nó lên không gian lưu trữ được chia sẻ của tôi, nó không hoạt động.

mã bên dưới.

bmpOut = new Bitmap(Size, Size); 
Graphics g = Graphics.FromImage(bmpOut); 
g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic; 
g.FillRectangle(Brushes.White, 0, 0, Size, Size); 
int topBottomPadding = 0; int leftRightPadding = 0; 
if (Size > lnNewWidth + 1) 
    leftRightPadding = Convert.ToInt32((Size - lnNewWidth)/2); 
else if (Size > lnNewHeight + 1) 
    topBottomPadding = Convert.ToInt32((Size - lnNewHeight)/2); 
g.DrawImage(loBMP, leftRightPadding, topBottomPadding, lnNewWidth, lnNewHeight); 
Bitmap bmp = new Bitmap(bmpOut); 
if (bmp != null) 
    bmp.Save(ResizedOutput); // C:\Inetpub\vhosts\DomainName\httpdocs\ProductImages\500px\gigabyte_ga_ep45_ds4_profilelarge[1].jpg 
bmp.Dispose(); 
bmpOut.Dispose(); 
g.Dispose(); 
loBMP.Dispose(); 

stack trace:

[ExternalException (0x80004005): A generic error occurred in GDI+.] 
    System.Drawing.Image.Save(String filename, ImageCodecInfo encoder, EncoderParameters encoderParams) +377630 
    System.Drawing.Image.Save(String filename, ImageFormat format) +69 
    System.Drawing.Image.Save(String filename) +25 
    Utilities.ResizeImage(String fileName, String mode) in c:\inetpub\vhosts\batuhanakcay.com\httpdocs\App_Code\Utilities.cs:181 
    Link.ToProductImage(String fileName) in c:\inetpub\vhosts\batuhanakcay.com\httpdocs\App_Code\Link.cs:79 
    Product.PopulateControls(ProductDetails pd) in c:\inetpub\vhosts\batuhanakcay.com\httpdocs\Product.aspx.cs:37 
    Product.Page_Load(Object sender, EventArgs e) in c:\inetpub\vhosts\batuhanakcay.com\httpdocs\Product.aspx.cs:20 

Trả lời

12

Từ ASP Net - GDI+ and SAVE JPG or BMP on the server

99,9% thời gian, khi sử dụng GDI, 'một lỗi chung xảy ra' có nghĩa là thư mục mà bạn đang cố gắng để tiết kiệm để không ahve quyền thích hợp. Thông thường, bạn cần đảm bảo rằng thư mục đang cho phép asp.net sửa đổi tệp.

Bạn có kiểm tra các quyền không?

+0

cách ngớ ngẩn của tôi, tôi đã được đào thông qua mã của tôi trong 2 ngày cố gắng tìm những gì heck là sai. bạn đã đúng, nó phải là điều đầu tiên tôi đã kiểm tra. tôi chỉ cung cấp cho người dùng "Người dùng Plesk IIS WP (IWAM_plesk (mặc định))" toàn quyền, và nó đang hoạt động. cảm ơn. – Batu

+1

SO có nghĩa là trở thành đôi mắt thứ hai của bạn X-) –

2

Lỗi này cũng xảy ra khi bạn cố lưu trên mạng chia sẻ. Giải pháp duy nhất để khắc phục điều này là di chuyển bitmap của bạn sang luồng bộ nhớ và lưu nó bằng luồng tệp vào mạng chia sẻ.

Dưới đây là một phương pháp khuyến nông để dễ dàng sửa lỗi này:

public static void SaveOnNetworkShare(this System.Drawing.Image aImage, string aFilename, 
    System.Drawing.Imaging.ImageFormat aImageFormat) 
{ 
    using (System.IO.MemoryStream lMemoryStream = new System.IO.MemoryStream()) 
    { 
    aImage.Save(lMemoryStream, aImageFormat); 

    using (System.IO.FileStream lFileStream = new System.IO.FileStream(aFilename, System.IO.FileMode.Create)) 
    { 
     lMemoryStream.Position = 0; 

     lMemoryStream.CopyTo(lFileStream); 
    } 
    }  
} 
Các vấn đề liên quan