【问题标题】:System.IO.FileNotFoundException encountered while file uploading using FileUpload control使用 FileUpload 控件上传文件时遇到 System.IO.FileNotFoundException
【发布时间】:2012-12-27 03:04:46
【问题描述】:

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

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"));

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

【问题讨论】:

  • 这将如何运作?您在定义之前使用originalImage。它肯定会给出一个空值。或者我认为这将是一个编译器错误。
  • 好的..让我试试你的解决方案,然后告诉你..
  • 为了将来的参考,我会将该代码包装在 try{}catch{}
  • @DJKRAZE 我尝试了你的解决方案..但情况仍然一样......
  • Shiva 你能在你有这个代码的地方发布完整的方法代码吗?谢谢

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


【解决方案1】:

我不确定你为什么要硬编码 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.";
        }
    }
}

【讨论】:

  • psst,缺少一个结束括号。 FileUpload1.FileName));
  • 第一个代码不起作用。我会尝试第二个,让你知道
  • @DJKRAZE :我解决了这个问题,并发布了解决方案作为答案。请看一下。
【解决方案2】:

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

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

您也可以查看此链接update panel with file upload [Refered by: Shadow Wizard] 以在不移除更新面板的情况下解决此问题。

【讨论】:

  • Shiva 太棒了,我不知道你使用了更新面板,如果是这样的话,我可以帮助你更快地解决这个问题。坚持尝试解决你的问题真是太棒了问题和成功的 +1
  • 感谢@ShadowWizard 提供链接。这解释了我的原因。
  • 感谢@DJKRAZE。我认为它与更新面板无关。但是当我尝试了所有的事情时,这是剩下的最后一个技巧,所以我应用了它并且它奏效了。 :)
  • 不是问题 Shiva .. 我知道面板在 winforms 与 Web 表单中是不同的,尤其是更新面板,因为部分回发方面有很多有这个问题,但在挖掘后他们通常会弄清楚以及你有..顺便搞清楚它的好工作..
猜你喜欢
  • 1970-01-01
  • 2016-04-01
  • 1970-01-01
  • 2015-07-09
  • 2018-01-31
  • 1970-01-01
  • 1970-01-01
  • 2013-02-15
  • 1970-01-01
相关资源
最近更新 更多