在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 }));
}
答案 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));