2013-07-03 104 views
0

我試圖使用swfupload上傳文件到服務器。照片上傳在開發機器上工作得很好,但是當我試圖在生產服務器上檢查它時。有500 internal server error。檢查例外詳情asp.net頁面上500內部服務器錯誤可能由server.MapPath

   `Stack trace: at System.Drawing.Image.Save(String filename, ImageCodecInfo encoder, EncoderParameters encoderParams) 
    at System.Drawing.Image.Save(String filename, ImageFormat format) 
    at ImageryDataAccess.SaveFullSizeImage(Byte[] ImageData) 
    at ImageryDataAccess.SaveUserImage(Byte[] ImageData, Guid UserId) 
    at Photos.Page_Load(Object sender, EventArgs e) 
    at System.Web.Util.CalliHelper.EventArgFunctionCaller(IntPtr fp, Object o, Object t, EventArgs e) ` 

顯示了此詳細信息。我檢查保存fullsizeimage好像有隻有一個犯罪嫌疑人的功能,那就是

  string fileName=ImageName.ToString() + ".JPEG"; 
    string App_datapath = HttpContext.Current.Server.MapPath("~/App_Data/setP"); 
    bmp.Save(App_datapath+"/" +fileName, System.Drawing.Imaging.ImageFormat.Jpeg); 

此代碼開發服務器上的罰款,但不生產。我不確定我在這裏出了什麼問題。 /是我唯一的猜測,因爲微軟使用\作爲目錄路徑。但爲什麼然後它會在開發服務器上工作。如果有任何人可以解決問題..

+1

這條道路是否存在?作爲一個方面的說法,將用戶上傳的文件存儲在根之外可能會更安全,因此如果有人設法上傳惡意文件,則無法在線執行 –

+0

是的,路徑存在,您是對的我必須做到這一點,但現在我必須使這項工作.. –

+1

@Bartdude - 不是真的 - 他的上傳腳本應該只允許人們上傳某些文件擴展名。 – Darren

回答

1

問題是你想保存到App_Data文件夾 - 此文件夾是只適用於實際代碼。您不能在默認情況下寫入,您也無法將其內容輸出到您的網站。

App_Data特別是指爲數據唯一的 - 如XML &數據庫文件 - 在這裏看到更多的信息:MSDN App_Data folder

所以,就算你將文件保存到app_data你會能夠顯示它 - 您將收到未經授權的訪問錯誤消息。這樣

HttpContext.Current.Server.MapPath("~/uploadImages/setP")

HttpContext.Current.Server.MapPath("~/App_Data/setP")

的東西本質上給自己一個不同的文件夾上傳到:

要修復,改變這種狀況。

更新

從看來你所得到的A Generic error occurred in GDI+.....消息的評論之後。這通常是由於您要保存的文件夾的寫權限未設置。改變他們以啓用寫入,你很好去。雖然,但最好不要將它們保存在那裏,除非你真的必須......

+0

爲什麼然後它在開發機器上工作?我可以使用httphandler來保存和顯示圖像 –

+0

開發服務器有點「寬容」 - 我也想象你沒有在生產服務器上爲該文件夾設置寫權限。總而言之 - 不要將它們存儲在那裏..從長遠來看,這會導致更多的問題。 – Darren

+0

好的,謝謝darren ..所以這意味着我正在使用的路徑不會導致問題,但目錄訪問和身材? –

相關問題