【问题标题】:Invalid length for a Base-64 char array or string convert from base64从 base64 转换的 Base-64 字符数组或字符串的长度无效
【发布时间】:2021-10-14 05:10:49
【问题描述】:

我已使用此处找到的工具将图像转换为 Base64 字符串 https://codebeautify.org/base64-encode 并插入到 (2015 SQL Server) 表中的 (varchar(max)) 列中。 SQL 插入的执行本身没有问题并且是成功的。当尝试使用以下代码转换 base64 字符串时,问题出现在我的 C# 程序(VS 2019)中:

    byte[] bytes = Convert.FromBase64String(image);

我收到 Base-64 字符数组或字符串错误的长度无效。根据之前的一些帖子,我尝试在字符串末尾添加填充,但我没有运气。

**更新** 我已经解决了这个问题。我找到了一个对我有用的不同转换工具。 https://elmah.io/tools/base64-image-encoder/

【问题讨论】:

  • docs.microsoft.com/en-us/dotnet/api/… - 你不需要从某些网站上复制粘贴东西 - 可能是错误出现的地方。比较 c# 所做的前向转换与数据库中的值,会出错
  • 我尝试了第二种解决方案,但没有成功。我们目前有一个使用 Base64 字符串表示的图像并使用之前列出的 Convert 函数的过程,没有任何问题。该 base64 字符串存储在我正在使用的同一个 SQL 表/列中。我已经复制了那个字符串并用它更新了我的记录,但没有运气。
  • 我不太明白这个“复制...” - 为什么不直接执行 var cmd = new SqlCommand("INSERT INTO x VALUES(@b64str)", connstr), cmd.Parameters.AddWithValue("@b64str", Convert.ToBase64String(File.ReadAllBytes("path/to.image"))); ?然后你可以下载它,Convert.FromB64String,看看它是否有效..如果有效,请随意将 in db 值与您从某个网站复制的值进行比较...
  • 在 SSMS 中,我执行了一个简单的从表中选择图像,在输出窗口中,结果集包含我复制字符串并尝试在 SSMS 中对我的使用我刚刚复制的那个字符串进行图像记录。
  • 您知道 SSMS 网格单元有长度限制,对吧?所有这些“复制到这里”、“复制到那里”只会让你的生活变得很辛苦,尤其是处理图像数据之类的东西,这很容易超过 SSMS 中配置的任何限制;如果你从一开始就在 C# 中完成了读取和写入,那么你已经完成了......

标签: c# sql-server base64 data-conversion


【解决方案1】:

Base64 不是一种标准,而是一种具有多种实现方式的方法。猜测一下,您所缺少的(请欣赏双关语)是一些填充 - 通常是 '=' 字符。如果这不起作用,请参阅 Wikipedia 了解背景信息。

通常,您必须确保编码器和解码器使用相同的字符集(请参阅文章变体部分)和填充约定。

【讨论】:

    猜你喜欢
    • 2017-09-21
    • 2019-02-11
    • 2018-01-16
    • 2015-12-06
    • 2011-02-24
    相关资源
    最近更新 更多