【问题标题】:500 internal server error on asp.net page caused probably by server.MapPath可能由 server.MapPath 引起的 asp.net 页面上的 500 内部服务器错误
【发布时间】:2013-07-01 04:26:38
【问题描述】:

我正在尝试使用 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);

此代码在开发服务器上运行良好,但在生产服务器上运行不正常。我不确定我在这里出了什么问题。 / 是我唯一的猜测,因为微软使用\ 作为目录路径。但同样为什么它会在开发服务器上运行。如果有人能解决这个问题..

【问题讨论】:

  • 这条路径是否存在?附带说明一下,将用户上传的文件存储在根目录之外可能更安全,这样如果有人设法上传恶意文件,就无法在线执行
  • 是的,路径存在,你是对的,我必须这样做,但现在我必须完成这项工作..
  • @Bartdude - 不是真的 - 他的上传脚本应该只允许人们上传某些文件扩展名。

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


【解决方案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")

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

更新

从 cmets 看来,您似乎收到了 A Generic error occurred in GDI+..... 消息。这通常是由于未设置您尝试保存到的文件夹的写入权限。更改它们以启用写入,您就可以开始了。不过,最好不要把它们保存在那里,除非你真的必须..

【讨论】:

  • 为什么它可以在开发机器上工作?我可以使用 httphandler 保存和显示图像
  • 开发服务器更“宽容”——我还想你在生产服务器上没有为该文件夹设置写权限。总而言之-不要将它们存储在那里..从长远来看会导致更多问题。
  • 好的,谢谢 darren .. 所以这意味着我使用的路径没有引起问题,而是目录访问和身份?
  • 那就这样吧。您没有对该文件夹设置写权限。
  • 那么在这种情况下,按照 Bartdude 的建议进行操作,并将它们保存在根目录之外 - 如果可以的话.. - 如果没有,那么您可以使用文件名的 guid 重命名图像。不太可能猜到它。您还可以设置服务器以限制某些文件夹中的内容传送。
猜你喜欢
  • 1970-01-01
  • 2012-07-08
  • 1970-01-01
  • 2016-04-25
  • 1970-01-01
  • 1970-01-01
  • 2016-06-05
  • 2018-06-22
  • 2012-06-22
相关资源
最近更新 更多