ASP.NET MVC文件上载在本地构建上工作,在部署后不工作

时间:2015-08-05 12:53:46

标签: c# asp.net asp.net-mvc asp.net-mvc-5

在localhost上构建时,上传图像文件的代码工作正常。但是在部署时,它不起作用而且没有任何错误。

我尝试将imagePath从/Content/Images/Items/更改为~/Content/Images/Items/Content/Images/Items/。仍然没有解决方案。

[HttpPost]
public ActionResult AddProduct(ProductDisplay productDisplay,HttpPostedFileBase upload)
{
    bool isSaved = false;
    string fileName = string.Empty;
    string imagePath = string.Empty;
    try
    {
        if(upload!=null && upload.ContentLength>0)
        {
            fileName = System.IO.Path.GetFileName(upload.FileName);
            imagePath = "/Content/Images/Items/" + fileName;
            upload.SaveAs(Server.MapPath(imagePath));
        }
        else
            imagePath = "/Content/Images/Items/" + "NoImage.jpg";
        productDisplay.ImagePath = imagePath;
        ProductMangementBL balProduct = new ProductMangementBL();
        isSaved = balProduct.AddProduct(productDisplay);
    }
    catch (Exception ex)
    {
        isSaved = false;
    }
    return RedirectToAction("ProductList", new RouteValueDictionary(new { controller = "Product", action = "ProductList", Id = productDisplay.CategoryID }));
}

6 个答案:

答案 0 :(得分:3)

要检查的一些事项:

var mapped = Server.MapPath(imagePath);
if (File.Exists(mapped))
{
  //
}
else
{
  throw new FileNotFoundException(imagePath);
}

换句话说,图像可能不存在。

答案 1 :(得分:2)

可能想要检查您的应用程序池正在运行的内容,以及它是否有权写入文件。

答案 2 :(得分:0)

您需要创建testProductAdd操作和相应的测试视图。

然后尝试运行此代码而不进行任何异常处理。

fileName = System.IO.Path.GetFileName(upload.FileName);
imagePath = "/Content/Images/Items/" + fileName;
upload.SaveAs(Server.MapPath(imagePath));

通过这种方式,您可以找出问题所在。

答案 3 :(得分:0)

为您的异常处理添加一个日志记录功能,因为现在您只是设置一个布尔值,并且在退出该函数之前从不再使用它,从而丢失异常中的信息。

将异常写入文本文件,它将为您提供错误原因并指导您找到解决方案。

您可以使用像StreamWriter这样简单的内容将异常写入文本文件。

例如:

try
{
    if(upload!=null && upload.ContentLength>0)
    {
        fileName = System.IO.Path.GetFileName(upload.FileName);
        imagePath = "/Content/Images/Items/" + fileName;
        upload.SaveAs(Server.MapPath(imagePath));
    }
    else
        imagePath = "/Content/Images/Items/" + "NoImage.jpg";
    productDisplay.ImagePath = imagePath;
    ProductMangementBL balProduct = new ProductMangementBL();
    isSaved = balProduct.AddProduct(productDisplay);
}
catch (Exception ex)
{
    using (StreamWriter writer = new StreamWriter("C:\\log.txt", true))
    {
        writer.WriteLine(ex);
    }
}

这会将错误消息和堆栈跟踪写入C:驱动器中的文本文档“log.txt”。

答案 4 :(得分:0)

  • 分配"网络服务"帐户到目标文件夹。
  • 然后给"网络服务"完全权限(不安全)。
  • 然后将文件移动到另一个文件夹(备选选项)。

更安全的选择:

答案 5 :(得分:0)

您的服务器上可能存在相应的文件夹。

在保存文件之前考虑检查文件夹是否存在:

string directory=Server.MapPath("/Content/Images/Items/");
if(!Directory.Exists(directory))
{
    Directory.CreateDirectory(directory);
}
upload.SaveAs(Path.Combine(directory,fileName));