所以我试图想出将图像转换为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所以我认为我只需要找出该路径,并且将适用于测试和实时网站。
干杯
答案 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)
如果您的本地计算机不是您的服务器计算机,您可以尝试显示从服务器到客户端计算机的路径。
然后,使用服务器的IP地址访问您的共享文件夹。例如:
' \ 10.0.0.164 \内容\图像\大拇指\ 0000001_camping_650.jpeg'
答案 3 :(得分:-1)
如果您在本地计算机上进行测试。 请检查您的本地计算机中是否存在该文件
'C:\内容\图像\大拇指\ 0000001_camping_650.jpeg'
或检查应用程序所在位置。