ASP.NET根路径

时间:2010-05-14 20:14:29

标签: asp.net

我在尝试保存文件时收到此异常:

System.Web.HttpException: The SaveAs method is configured to require a rooted path, and the path '~/Thumbs/TestDoc2//small/ImageExtractStream.bmp' is not rooted.
at System.Web.HttpPostedFile.SaveAs(String filename)
at System.Web.HttpPostedFileWrapper.SaveAs(String filename)
at PitchPortal.Core.Extensions.ThumbExtensions.SaveSmallThumb(Thumb image) in C:\Users\Bich Vu\Documents\Visual Studio 2008\Projects\PitchPortal\PitchPortal.Core\Extensions\ThumbExenstions.cs:line 23

代码如下:

public static void SaveSmallThumb(this  Thumb image)
    {
        var logger = Microsoft.Practices.ServiceLocation.ServiceLocator.Current.GetInstance<ILoggingService>();

        string savedFileName = HttpContext.Current.Server.MapPath(Path.Combine(
          image.SmallThumbFolderPath,
          Path.GetFileName(image.PostedFile.FileName)));
        try
        {
            image.PostedFile.SaveAs(savedFileName);
        }
        catch (Exception ex)
        {
            logger.Log(ex.ToString());
        }
    }

这里有什么问题?

2 个答案:

答案 0 :(得分:0)

您的问题是您正在生产的路径(可能是由于MapPath失败):

~/Thumbs/TestDoc2//small/ImageExtractStream.bmp

请注意//TestDoc2之间的small

你结合似乎是可能导致双斜线的问题。

image.SmallThumbFolderPathPath.GetFileName(image.PostedFile.FileName)的输出是什么?

SaveAs需要物理路径(例如c:/Thumbs/TestDoc2//small/ImageExtractStream.bmp)。

答案 1 :(得分:0)

看起来MapPath没有正确映射您的路径。您可能在smallthumbfolderpath的末尾和image.postedfile.filename的开头有一个/,导致生成的路径中出现双斜杠。从其中任何一个中删除/,MapPath调用应该正确返回。

SaveAs方法需要一个root路径,这意味着它以一个驱动器号开头。运行MapPath后确保路径不以~开头,你应该没问题。