使用FileUpload控件上传文件时遇到System.IO.FileNotFoundException

时间:2013-01-12 18:39:55

标签: c# asp.net file file-upload filenotfoundexception

我有以下代码用于将图片上传到我的网站。首先将图像上载到临时文件夹,然后在将新图像上载到主图像文件夹之后调整其大小。

FileUpload1.SaveAs(Server.MapPath("~/TEMP/tmpimg.jpg"));
System.Drawing.Image originalImage = System.Drawing.Image.FromFile(Server.MapPath("~/TEMP/tmpimg.jpg"));
System.Drawing.Image MainImg = new SPCL().ResizeImage(originalImage, 700, 600, false);
MainImg.Save(Server.MapPath("~/Images/Home/Home1.jpg"));

这是以下例外情况:

System.IO.FileNotFoundException: C:\site\wwwroot\TEMP\tmpimg.jpg at System.Drawing.Image.FromFile(String filename, Boolean useEmbeddedColorManagement) at Settings.saveImages() at Settings.saveSettings()
at System.Drawing.Image.FromFile(String filename, Boolean useEmbeddedColorManagement) at Settings.saveImages() at Settings.saveSettings()

我已经设置了该文件夹的所有写权限,甚至尝试在网站的所有文件夹上启用所有权限(当我感到烦躁时;)

错误发生在此行System.Drawing.Image.FromFile(Server.MapPath("~/TEMP/tmpimg.jpg"));

未在指定路径创建文件。 请任何人知道为什么会这样,我该如何解决这个问题?

2 个答案:

答案 0 :(得分:2)

我不确定你为什么要对FileUpload.SaveAs()方法中的名称或文件进行硬编码尝试这样的事情

FileUpload1.SaveAs(Path.Combine(Server.MapPath("~/TEMP/"), FileUpload1.FileName));

如果服务器根目录中有文件夹...则需要将其添加到Temp / someFolderName / 尝试设置虚拟目录以写入该文件夹。

你也可以这样做

FileUpload1.PostedFile.SaveAs(Path.Combine(Server.MapPath("~/TEMP/"), FileUpload1.FileName));

HttpPostedFileClass

从MSDN引用已经过测试,因此您可以按照这样的方式进行操作。请记住,如果此代码不起作用,则可能是您的权限问题。

protected void Page_Load(object sender, EventArgs e)
{
    if(IsPostBack)
    {
        Boolean fileOK = false;
        String path = Server.MapPath("~/UploadedImages/");
        if (FileUpload1.HasFile) 
        {
            String fileExtension = 
                System.IO.Path.GetExtension(FileUpload1.FileName).ToLower();
            String[] allowedExtensions = 
                {".gif", ".png", ".jpeg", ".jpg"};
          for (int i = 0; i < allowedExtensions.Length; i++)
          {
               if (fileExtension == allowedExtensions[i])
               {
                    fileOK = true;
               }
          }
        }

        if (fileOK)
        {
            try
            {
                FileUpload1.PostedFile.SaveAs(path 
                    + FileUpload1.FileName);
                Label1.Text = "File uploaded!";
            }
            catch (Exception ex)
            {
                Label1.Text = "File could not be uploaded.";
            }
        }
        else
        {
            Label1.Text = "Cannot accept files of this type.";
        }
    }
}

答案 1 :(得分:1)

好吧,我终于找到了问题的解决方案。并发布答案,希望将来可以解决别人的同样问题。

我通过删除包含FileUpload控件的更新面板解决了这个问题。

此外,您可以查看此链接update panel with file upload [参考:影子向导]以解决此问题,而无需删除更新面板。