在asp.net mvc中将图像上传到服务器时,路径不是有效的虚拟路径

时间:2014-01-02 15:32:19

标签: c# .net asp.net-mvc asp.net-mvc-3 asp.net-mvc-4

我想将图像上传到服务器,但是可以使用~/images/profile将图像本地上传到项目文件夹,但如果我使用完整路径,则不会将图像上传到服务器。我正在使用的代码在下面给出了一个示例网址。请帮忙解决我的问题。我已经看到了stackoverflow的其他链接,但它们无法正常工作。它给出路径的错误消息是无效的。虚拟路径和SaveAs方法配置为需要根路径,并且路径不是root。

public ActionResult FileUpload(HttpPostedFileBase file, tbl_Image model)
{
    if (file != null)
    {
        string pic = System.IO.Path.GetFileName(file.FileName);
        string path = System.IO.Path.Combine(Server.MapPath("http://sampleApp.com/images/profile/"), pic);
        file.SaveAs(path);
        db.AddTotbl_Image(new tbl_Image() { imagepath = "http://sampleApp.com/images/profile/" + pic });
        db.SaveChanges();
    }

    return View("FileUploaded", db.tbl_Image.ToList());
}

2 个答案:

答案 0 :(得分:1)

为什么在代码中使用网站名称(“http://sampleApp.com”)?我认为你不需要保存。

public ActionResult FileUpload(HttpPostedFileBase file, tbl_Image model)
{
    if (file != null)
    {
        string fileName = System.IO.Path.GetFileName(file.FileName);
        string fullPath = System.IO.Path.Combine(Server.MapPath("~/images/profile"), fileName);
        file.SaveAs(fullPath);
        db.AddTotbl_Image(new tbl_Image() { imagepath = "http://sampleApp.com/images/profile/" + fileName });
        db.SaveChanges();
    }

    return View("FileUploaded", db.tbl_Image.ToList());
}

您还可以在数据库中仅保存 fileName作为一般目标。因为将来URL可以改变。 (按域名,SSL等)。

答案 1 :(得分:0)

Server.MapPath不应包含网址。这是肯定的。

另外,请勿使用

string pic = System.IO.Path.GetFileName(file.FileName);

但只是

string pic = file.FileName;