系统IO文件未找到异常C#

时间:2017-08-07 05:46:00

标签: c# visual-studio filesystems nopcommerce

所以我试图想出将图像转换为base64版本的代码。 但我得到一个异常抛出。

System.IO.FileNotFoundException: 'C:\content\images\thumbs\0000001_camping_650.jpeg'

现在,我正在本地计算机上处​​理该网站的副本,但图像存储在测试服务器上。所以我很确定这就是问题的根源所在。 此外,数据库也不是本地的,而是在sql server上。 sql server和test server都是面向公众的。

这是我正在使用的代码:

string base64String = string.Empty;
// Convert Image to Base64
using (var img = System.Drawing.Image.FromFile(Path.GetFullPath(pictureModel.ImageUrl))) // Image Path from File Upload Controller
{
   using (var memStream = new MemoryStream())
   {
      img.Save(memStream, img.RawFormat);
      byte[] imageBytes = memStream.ToArray();

      // Convert byte[] to Base64 String
      base64String = Convert.ToBase64String(imageBytes);
      string ImageBase64 = base64String;
      //   return base64String;
    }
  }

调试输出:

System.Diagnostics.Debug.WriteLine(pictureModel.ImageUrl);
System.Diagnostics.Debug.WriteLine(Path.GetFullPath(pictureModel.ImageUrl));

就是这样:

/content/images/thumbs/0000001_camping_650.jpeg
C:\content\images\thumbs\0000001_camping_650.jpeg

不确定如何解决这个问题。 我还使用了一个桶存储库,因此content\images\thumbs\目录从存储库中排除。

我在本地计算机上的解决方案是C:\ projects \ test-website所以我认为我只需要找出该路径,并且将适用于测试和实时网站。

干杯

4 个答案:

答案 0 :(得分:1)

重构您的代码如下:

string base64String = string.Empty;
// Convert Image to Base64
using (var img = System.Drawing.Image.FromFile(Server.MapPath("~") + pictureModel.ImageUrl))) // Image Path from File Upload Controller
{
    using (var memStream = new MemoryStream())
    {
        img.Save(memStream, img.RawFormat);
        byte[] imageBytes = memStream.ToArray();

        // Convert byte[] to Base64 String
        base64String = Convert.ToBase64String(imageBytes);
        string ImageBase64 = base64String;
        //   return base64String;
    }
}

答案 1 :(得分:1)

好的,好像我想出来了。

第一步是将所有图像复制到解决方案中。 然后我需要使用Server.MapPath来获取图像的绝对路径。

using (var img = System.Drawing.Image.FromFile(Server.MapPath(pictureModel.ImageUrl))) // Image Path from File Upload Controller
                    {
                        using (var memStream = new MemoryStream())
                        {
                            img.Save(memStream, img.RawFormat);
                            byte[] imageBytes = memStream.ToArray();

                            // Convert byte[] to Base64 String
                            base64String = Convert.ToBase64String(imageBytes);
                            string ImageBase64 = base64String;
                            //   return base64String;
                        }
                    }

所以现在我做这个输出:

System.Diagnostics.Debug.WriteLine(Server.MapPath(pictureModel.ImageUrl));

我得到了这条道路:

C:\projects\test-website\Presentation\Nop.Web\content\images\thumbs\0000001_camping_650.jpeg

我认为这是正确的,所以当我确认一切正常时会接受我的答案,现在又弄错了:/

感叹编码的乐趣

答案 2 :(得分:0)

如果您的本地计算机不是您的服务器计算机,您可以尝试显示从服务器到客户端计算机的路径。

  1. 首先,您需要共享您的根文件夹。
  2. 然后,使用服务器的IP地址访问您的共享文件夹。例如:

    ' \ 10.0.0.164 \内容\图像\大拇指\ 0000001_camping_650.jpeg'

答案 3 :(得分:-1)

如果您在本地计算机上进行测试。 请检查您的本地计算机中是否存在该文件

  
    

'C:\内容\图像\大拇指\ 0000001_camping_650.jpeg'

  

或检查应用程序所在位置。