2011-05-17 26 views
1

你好,我有我的調整大小和上傳img到服務器的問題。一切都很好,但今天告訴我的朋友,當他想要添加img到服務器時,他得到了「在GDI +中發生了一個通用錯誤」。但是在我的電腦中一切正常。那麼可以用IIS的問題? (兩天前他有一些問題,所以管理員在服務器上改變了一些東西)。GDI +發生一般性錯誤。 (只有當我嘗試在服務器上)

Bitmap image = KTEditImage.ResizeImage(new Bitmap(file.PostedFile.InputStream), 360, 360); 
image.Save(Server.MapPath("~") + "/Static/Img/Zbozi/" + urlName, ImageFormat.Jpeg); 
image.Dispose(); 
Bitmap smallImage = KTEditImage.ResizeImage(new Bitmap(file.PostedFile.InputStream), 230, 230);       
smallImage.Save(Server.MapPath("~") + "/Static/Img/Zbozi/Small/" + urlName, ImageFormat.Jpeg); 
smallImage.Dispose(); 

和調整方法是

public static Bitmap ResizeImage(Bitmap image, int maxWidth, int maxHeight) 
{ 
    return new Bitmap(image, maxWidth, maxHeight); 
} 
+0

我想這是一種特權相關問題。你能檢查目標文件夾的所有者是否與IIS正在運行的用戶相同嗎? – alexn 2011-05-17 18:33:07

+0

我可以問我該如何檢查? – John 2011-05-17 18:36:20

+0

我目前沒有Windows機器可用,但是如果我沒有弄錯,您可以右鍵單擊文件夾,屬性,安全性,高級,然後選擇所有者選項卡。然後你可以看到所有者。 – alexn 2011-05-17 18:37:16

回答

5

授予寫權限在目標目錄ASPNET帳戶(Windows XP)或NETWORK SERVICE帳戶(在Windows Server 2003/2008/Vista/7),

+3

如果網站在IIS 7上運行,授予權限的帳戶取決於分配給運行該網站的應用程序池的帳戶。它並不總是網絡服務,並且在大多數情況下,網絡服務不是默認設置。 – esteuart 2011-05-18 18:23:29

0

這可能是一個權限問題與文件保存到該路徑。您需要確保「/ Static/Img/Zbozi」和「/ Static/Img/Zbozi/Small」目錄允許匿名用戶保存文件。

+0

允許匿名用戶在文件夾上寫入必須避免,並且會帶來安全問題。 – 2011-05-18 07:11:48

0

此問題是由於Net框架來處理圖像資源,請使用GC.Collect();代碼後

1

我有類似於這個問題的地方,我調整了一個圖像的大小,並用調整大小的版本替換原來的。我發現GDI + Exception是因爲導致問題的圖像是只讀,並且無法被覆蓋。

我在下面的代碼中的目標是調整超過最大文件大小的圖像大小。

for (int i = 0; i < LoadedImgs.Length; i++) 
{ 
    info = new FileInfo(LoadedImgs[i].origImgFullPath); 
    double sizeMB = Math.Round(((double)info.Length/1048576.0), MidpointRounding.AwayFromZero); 
    if (sizeMB > (double)numImgMaxSize.Value) 
    { 
     Bitmap bmpOrigImg = new Bitmap(LoadedImgs[i].origImgFullPath); 
     Bitmap bmpResizeImg = null; 

     bmpResizeImg = ImageUtilities.Resize(bmpOrigImg, sizeMB); 

     #region Save the resized image over the original 
     bmpOrigImg.Dispose();       
     bmpResizeImg.Save(LoadedImgs[i].origImgFullPath); 
     bmpResizeImg.Dispose(); 
     #endregion 
    } 
} 

而且,我調整算法到一個特定的文件大小需要調整(不包括位壓縮等),但在共享的名稱:

Bitmap origBmp = new Bitmap(image.Width, image.Height); 
double ratio = (double)image.Width/(double)image.Height; 

double bitDepth = 32.0;//Output BMP default 
double newHeight = Math.Sqrt((1024.0 * 1024.0 * 8.0)/(ratio * bitDepth)); 

int height = (int)Math.Round(newHeight, MidpointRounding.AwayFromZero); 
int width = (int)Math.Round(newHeight * ratio); 
相關問題