将 BMP 图像文件从 Base-64 转换为二进制时格式不正确的问题

问题描述 投票:0回答:1

我正在尝试将 Fabric.Canvas 的 toDataURL 返回的“数据”中包含的 Base-64 数据转换为具有相应扩展名(BMP)的文件。结果是“文件格式不正确”错误。

我遵循的步骤如下。

  1. 我使用 toDataURL 方法从 Fabric.Canvas 获取 dataURL 变量。

    dataURL = canvas.toDataURL({ 格式:'bmp', 质量:1.0 });

  2. 我仅提取包含“数据”的字符串。

    dataURLto64 = dataURL.substr(dataURL.lastIndexOf(',') + 1, dataURL.length - dataURL.lastIndexOf(',') - 1);

  3. 以上是在客户端完成的。在服务器上,我需要将字符串分段保存在 TXT 文本文件中。我已经验证文本文件的最终内容与原始 dataURLto64 (以 Base-64 表示)相同。

  4. 我提取文本文件的内容。

    string strtextfile64 = File.ReadAllText([path]);
    
  5. 我使用 Convert.FromBase64String 方法将该字符串转换为字节数组

byte[] fileBinary = null;

fileBinary = Convert.FromBase64String(strtextfile64);
        
File.WriteAllBytes([path], fileBinary);

我已经验证 dataURLto64 和 strtextfile64 具有相同的字符和相同的数字。 为了验证 Base-64 字符串是否正确,我在服务器上添加了以下验证。

 int mod4 = strtextfile64.Length % 4;   

 if (mod4 > 0) {
    strtextfile64 += new string('=', 4 - mod4);
 }

无需修改 strtextfile64,因为 mod4 = 0。

我附加了两个文本文件,其中包含初始(客户端)和最终(服务器)Base-64 字符串。

初始客户 最终服务者

有人可以告诉我为什么 Base-64 数据转换为二进制数据不符合从 Fabric.Canvas 创建的原始 BMP 文件中的原始 BMP 格式吗?

javascript c# base64 fabric bmp
1个回答
0
投票

我认为问题在于您的 base64 字符串可能使用不同的方法进行编码,而 Convert.FromBase64String 无法正确解码。

先尝试标准化base64:

string normalizedInput = input.Replace('-', '+').Replace('_', '/');

while (normalizedInput.Length % 4 != 0)
{
    normalizedInput += "=";
}

byte[] data = Convert.FromBase64String(normalizedInput);
© www.soinside.com 2019 - 2024. All rights reserved.