ASP.NET root paths
I am getting this exception when trying to save a file:
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
The code is below:
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.PostedFi开发者_如何学JAVAle.SaveAs(savedFileName);
}
catch (Exception ex)
{
logger.Log(ex.ToString());
}
}
What is wrong here?
You problem is your path being produce (possibly due to failure of MapPath):
~/Thumbs/TestDoc2//small/ImageExtractStream.bmp
Notice the 2 //
between TestDoc2
and small
.
You combine seems to be the issue that is probably causing the double slash.
What is the output of image.SmallThumbFolderPath
and Path.GetFileName(image.PostedFile.FileName)
?
The SaveAs
requires a physical path (eg. c:/Thumbs/TestDoc2//small/ImageExtractStream.bmp
).
It looks like MapPath isn't mapping your path properly. You probably have a /
at the end of smallthumbfolderpath and at the begining of image.postedfile.filename, resulting in the double-slash in your resulting path. Remove the /
from either one of these and the MapPath call should return properly.
The SaveAs method is expecting a rooted path, which means that it starts with a drive letter. Make sure that your path doesn't start with a ~
after you run MapPath and you should be fine.
精彩评论