2013-07-03 107 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 ..所以这意味着我正在使用的路径不会导致问题,但目录访问和身材? –

相关问题