2017-08-07 69 views
1

所以我想拿出代码将图像转换为base64版本。 但我得到一个异常抛出。系统IO文件未找到异常C#

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

现在我正在使用本地机器上的网站副本,但图像存储在测试服务器上。所以我很确定这是问题来自何处。 此外,数据库不在本地,但在SQL服务器上。 SQL服务器和测试服务器都是面向公众的。

这是我的工作代码:

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,所以我想我只需要弄清楚这个路径,它就可以用于测试和现场网站。

干杯

+0

你可以调试和检查'pictureModel.ImageUrl'的值是什么? –

+0

@Div感谢您的帮助,图片模型内置于nopcommerce,并返回文件名 –

+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; 
    } 
} 
+0

哈哈打我一分钟,干杯你的帮助:) –

+0

@WebDevGuy:是的,好吧:)很高兴我能帮助! –

-1

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

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

或检查你的应用程序的位置在那里位于。

+0

当然,例外情况很明显,但这不是解决方案。 –

+0

这是问题所在,文件没有存储在本地机器上。存储在测试服务器上,数据库保存该文件的路径 我也在使用一个存储桶存储库,所以'content \ images \ thumbs \'diretory被排除了f rom知识库 –

+0

我知道你的文件路径已经保存在服务器上,但是你正在测试你的web应用程序,本地机器..它被给出了。所以为什么要在你的方法中创建这条路。检查该文件是否存在..或在本地机器上创建该文件夹并重新创建它不存在。 – OzLa

0

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

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

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

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 

我认为这将是正确的,从而会接受我的答案时,我确认这一切作品,现在弄错了另一个错误:/

叹息编码的快乐