Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/384.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用JavaScript将文件从转换为Base 64,并使用C将其转换回文件#_Javascript_C#_Asp.net Web Api - Fatal编程技术网

使用JavaScript将文件从转换为Base 64,并使用C将其转换回文件#

使用JavaScript将文件从转换为Base 64,并使用C将其转换回文件#,javascript,c#,asp.net-web-api,Javascript,C#,Asp.net Web Api,我正在尝试使用javascript将pdf和图像文件转换为Base64,并使用WebAPI中的C#将其转换回文件 Javascript var filesSelected = document.getElementById("inputFileToLoad").files; if (filesSelected.length > 0) { var fileToLoad = filesSelected[0]; var fileReader = new FileReader();

我正在尝试使用javascript将pdf和图像文件转换为Base64,并使用WebAPI中的C#将其转换回文件

Javascript

var filesSelected = document.getElementById("inputFileToLoad").files;
if (filesSelected.length > 0)
{
    var fileToLoad = filesSelected[0];
    var fileReader = new FileReader();
    fileReader.onload = function(fileLoadedEvent) 
    {
        var textAreaFileContents = document.getElementById("textAreaFileContents");
        textAreaFileContents.innerHTML = fileLoadedEvent.target.result;
    };
    fileReader.readAsDataURL(fileToLoad);
}
C#

但在API中,我得到的异常是
{“输入不是有效的Base-64字符串,因为它包含一个非Base-64字符、两个以上的填充字符或填充字符中的一个非法字符。”}

请告诉我如何继续这个。。。
感谢

根据这些生成的URL,其前缀类似于
数据:image/jpeg;base64,
。查看生成的字符串。查找出现的
base64,
并获取在该前缀之后开始的base64数据。

因为
FileReader.readAsDataURL()
生成一个以额外元数据作为前缀的字符串(“URL”部分),您需要在C端将其去掉。下面是一些示例代码:

// Sample string from FileReader.readAsDataURL()
var base64 = "data:image/jpeg;base64,ba9867b6a86ba86b6a6ab6abaa====";

// Some known piece of information that will be in the above string
const string identifier = ";base64,";

// Find where it exists in the input string
var dataIndex = base64.IndexOf(identifier);

// Take the portion after this identifier; that's the real base-64 portion
var cleaned = base64.Substring(dataIndex + identifier.Length);

// Get the bytes
var bytes = Convert.FromBase64String(cleaned);
如果太冗长,你可以把它浓缩下来,我只是想一步一步地解释

var bytes = Convert.FromBase64String(base64.Substring(base64.IndexOf(";base64,") + 8));    

你发布的api是什么?它应该是
fileReader.result
是的,我正在发布fileReader.result…您可以发布控制器api操作吗?发布为
dd[0]的值是多少。Image\u base64Url
删除数据:Image/jpeg;base64,成功了。如果有人面临同样的问题,请使用此脚本从URL中删除前缀。。。var base64result=reader.result.split(',')[1];当试图上传更大的文件(比如5MB)时,脚本运行时没有将文件转换为字节..导致API中出现空错误。。。对此有任何修复吗???@Hem我已经使用MDN live结果将11mb的图像转换为base64字符串,从firefox中提取生成的url,将数据转储到文件中,用C#读取此文件以解码base64数据并写出图像。这很有效。因此,它可能是一个依赖于浏览器的设置或一个插件或类似的东西。“不转换运行”是什么意思?加载
事件是否已触发?
FileReader
还有一个
progress
和一个
error
事件。。。
var bytes = Convert.FromBase64String(base64.Substring(base64.IndexOf(";base64,") + 8));