asp.net页面上的500内部服务器错误可能是由server.MapPath引起的

时间:2013-07-03 12:59:00

标签: asp.net .net gdi+ absolute-path server.mappath

我正在尝试使用swfupload将文件上传到服务器。照片上传在开发机器上运行得非常好,但是当我试图在生产服务器上检查它时。有500 internal server error

检查异常详情
             `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) `

显示了这个细节。我检查了函数save 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)

问题是您要保存到App_Data文件夹 - 此文件夹仅适用于实际代码。默认情况下,您无法写入,也无法将其内容输出到您的网站。

App_Data仅适用于数据 - 例如XML&数据库文件 - 有关详细信息,请参阅此处:MSDN App_Data folder

因此,即使您设法将文件保存到app_data,您也 无法显示该文件 - 您将收到未经授权的访问错误消息。

要修复,请更改此内容:

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

这样的事情

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

基本上为自己上传一个不同的文件夹。

<强>更新

根据评论,您似乎收到了A Generic error occurred in GDI+.....消息。这通常是由于您尝试保存的文件夹的写权限未设置。改变它们以启用写入,你很高兴。但是,除非你真的必须,否则最好不要将它们保存在那里..