繁体   English   中英

如何将图像转换为存储在我的项目文件夹中的 base64 格式?

[英]How can I convert an image to a base64 format which is stored in my project folder?

如何将图像转换为存储在我的项目文件夹中的 base64 格式? 我试过这个。 但它不起作用

     public string ImageToBase64( string path)
    {
        string path = @"~/img/company.png";
        using (System.Drawing.Image image = System.Drawing.Image.FromFile(path))
        {
            using (MemoryStream m = new MemoryStream())
            {
                image.Save(m, image.RawFormat);
                byte[] imageBytes = m.ToArray();
                base64String = Convert.ToBase64String(imageBytes);
                return base64String;
            }
        }
    }

在调用System.Drawing.Image.FromFile(path)之前,将路径从 URL 解析为绝对路径。 您可以通过调用Server.MapPath(path)来做到这一点。

IE

string path = @"~/img/company.png";
path = Server.MapPath(path);
using (System.Drawing.Image image = System.Drawing.Image.FromFile(path))

或者干脆

string path = @"~/img/company.png";
using (System.Drawing.Image image = System.Drawing.Image.FromFile(Server.MapPath(path)))

更详细的解释

  • 在处理网络上的资源时,我们使用 URL。
  • URL ~/img/company.png表示从站点的根目录(这是波浪号 ( ~ ) 所指的)导航到img子文件夹,然后导航到文件company.png
  • System.Drawing.Image类不是为 URL 构建的,因此不知道如何处理它们。 相反,它需要文件系统的路径。 它无法理解 URL 的原因是:
    • 它不知道波浪号是什么意思
    • 它不知道站点的根在哪里
    • 即使给定path = @"img\\company.png"它也会尝试根据工作目录而不是站点的根目录查找文件。 当前工作目录可能是 IIS 可执行文件的位置( c:\\Windows\\System32\\inetsrv\\虽然我不确定/最好不要知道,因为工作目录的想法在网络上下文)。
    • 它没有虚拟路径的意识; 因此,即使工作目录与站点的根目录相同并且缺少波浪号, \\img\\也可能位于磁盘上与其在站点结构中的位置完全不同的位置; 甚至可能被映射到某个远程文件服务器上的共享)。
  • 调用Server.MapPath将此 URL 解析为非 Web 感知功能可以理解的真实路径。

这里有一个很好的答案,在Server.MapPath上提供了更多详细信息和示例: https : //stackoverflow.com/a/27500722/361842

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM