C# 将base64字符串转换为字节数组失败,因为base64字符串来自iOS-“;Base-64字符数组或字符串的长度无效;

C# 将base64字符串转换为字节数组失败,因为base64字符串来自iOS-“;Base-64字符数组或字符串的长度无效;,c#,ios,arrays,model-view-controller,base64,C#,Ios,Arrays,Model View Controller,Base64,我有一个MVC webapp,它的功能是将图像上传到服务器。该功能在Android和Windows上运行,但在iOS上仅部分运行。在iOS上,一些图像可以从base64字符串转换为字节数组,而另一些图像则不能。我测试过的所有图像都是jpeg类型的 图像通过文件输入检索,然后通过javascript编码为base64字符串: var reader = new FileReader(); reader.readAsDataURL(file); reader.onload = function ()

我有一个MVC webapp,它的功能是将图像上传到服务器。该功能在Android和Windows上运行,但在iOS上仅部分运行。在iOS上,一些图像可以从base64字符串转换为字节数组,而另一些图像则不能。我测试过的所有图像都是jpeg类型的

图像通过文件输入检索,然后通过javascript编码为base64字符串:

var reader = new FileReader();
reader.readAsDataURL(file);
reader.onload = function () {
    stringholder.value = reader.result;
    picholder.src = reader.result;
};
然后将此base64字符串传递给控制器,并在控制器中将其转换为字节数组:

var split = Image01.Split(',');
string Image01_Type = split[0] + ",";
string Image01_B64String = split[1];
byte[] Image01_Data = Convert.FromBase64String(Image01_B64String);
尝试从base64字符串转换为字节数组时,某些图像会导致以下错误:“Base-64字符数组或字符串的长度无效。”

我一辈子都搞不清楚是什么导致了这个错误。图像文件在javascript中无错误地转换为base64字符串,base64字符串本身看起来很好

有人能帮我找出哪里出了问题吗


*编辑:base64字符串在iOS上转换时似乎被截断。

将创建该字符串的字符串的字节长度与用于转换为字节的字符串的字节长度进行比较。通常这是由于字符串末尾的字符丢失造成的。reader.result(在javascript代码中)似乎返回了正确的结果。但是,由于控制器中的字符串被截断,因此无法将其正确发布到控制器。这可能是什么原因?请注意,这仅在iOS(Chrome和Safari)中发生。Android上的Chrome和Windows上的Chrome、IE和Edge都能正常工作。通常是因为通过通信链路传输二进制文件时不包括字节计数。网络流中的数据不是在一个块中接收的。所以你必须继续阅读直到你得到全部信息。你能解释一下我是怎么做到的吗?整个(不受信任的)base64字符串保存到上载页面上的输入元素中。提交表单时,如何确保将不受信任的字符串发送到控制器?表单是使用Html.BeginForm()和AntiForgeryToken发布的。截断是发生在向表单写入还是从表单读取?首先找出问题所在。