我在尝试保存文件时收到此异常:
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());
}
}
这里有什么问题?
答案 0 :(得分:0)
您的问题是您正在生产的路径(可能是由于MapPath失败):
~/Thumbs/TestDoc2//small/ImageExtractStream.bmp
请注意//
和TestDoc2
之间的small
。
你结合似乎是可能导致双斜线的问题。
image.SmallThumbFolderPath
和Path.GetFileName(image.PostedFile.FileName)
的输出是什么?
SaveAs
需要物理路径(例如c:/Thumbs/TestDoc2//small/ImageExtractStream.bmp
)。
答案 1 :(得分:0)
看起来MapPath没有正确映射您的路径。您可能在smallthumbfolderpath的末尾和image.postedfile.filename的开头有一个/
,导致生成的路径中出现双斜杠。从其中任何一个中删除/
,MapPath调用应该正确返回。
SaveAs方法需要一个root路径,这意味着它以一个驱动器号开头。运行MapPath后确保路径不以~
开头,你应该没问题。