在Javascript中创建二进制字符串并在C中转换#
我的JavaScript应用程序中有一个文件上传区域。当我上传文件时,我使用JSFileReader获取上传文件的二进制字符串。然后我将其传递给我的C#WebApi,并尝试将其写入文件,以便将其存储在服务器上 JS代码在Javascript中创建二进制字符串并在C中转换#,javascript,c#,typescript,filereader,Javascript,C#,Typescript,Filereader,我的JavaScript应用程序中有一个文件上传区域。当我上传文件时,我使用JSFileReader获取上传文件的二进制字符串。然后我将其传递给我的C#WebApi,并尝试将其写入文件,以便将其存储在服务器上 JS代码 let myFile = ev.target.files[0]; if(myFile.size > 0){ let reader = new FileReader(); var fileByteArray = []; reader.readAsArr
let myFile = ev.target.files[0];
if(myFile.size > 0){
let reader = new FileReader();
var fileByteArray = [];
reader.readAsArrayBuffer(myFile);
reader.onloadend = (e) => {
var buffer = <ArrayBuffer>reader.result;
var uintArray = new Uint8Array(buffer);
var binaryString = String.fromCharCode.apply(null, uintArray);
let resourceModel = new Model({
contentType: myFile.type,
fileName: myFile.name,
fileContent: binaryString
});
}
}
看起来一切都正常,在执行过程中没有抛出错误。但是,当您打开文件时,文件无法打开,因为它无法识别内容
有什么办法可以让它工作吗?感谢@JeremyBenks提出的使用Base64字符串的想法。我的示例的相关更改如下: JS 为此
var b64String = btoa(String.fromCharCode.apply(null,uintArray));
byte[] bytes = Convert.FromBase64String(model.FileContent);
C#
为此
var b64String = btoa(String.fromCharCode.apply(null,uintArray));
byte[] bytes = Convert.FromBase64String(model.FileContent);
感谢@JeremyBenks提出了使用Base64字符串的想法。我的示例的相关更改如下: JS 为此
var b64String = btoa(String.fromCharCode.apply(null,uintArray));
byte[] bytes = Convert.FromBase64String(model.FileContent);
C#
为此
var b64String = btoa(String.fromCharCode.apply(null,uintArray));
byte[] bytes = Convert.FromBase64String(model.FileContent);
“它不识别内容”-什么东西不识别内容?您能验证文件大小是否正确,或者使用十六进制转储程序查看它吗?@Pointy谢谢您的回复。我现在只是用一个基本的img来测试一下。传输的img比原始img的尺寸更大,因此肯定有不正确的地方。原始的是20kb,传输的img是25KB。这里有一件事:JavaScript字符串是16位字符。在图像文件中,可能存在看起来像Unicode 16位代码点的字节对。(也可能有无效的代码点。)嗯,我不认为Encoding.UTF8是读取内容的正确工具。“它不识别内容”-什么东西不识别内容?您能验证文件大小是否正确,或者使用十六进制转储程序查看它吗?@Pointy谢谢您的回复。我现在只是用一个基本的img来测试一下。传输的img比原始img的尺寸更大,因此肯定有不正确的地方。原始的是20kb,传输的img是25KB。这里有一件事:JavaScript字符串是16位字符。在图像文件中,可能存在看起来像Unicode 16位代码点的字节对。(也可能有无效的代码点。)嗯,我不认为Encoding.UTF8是读取内容的正确工具。请记住:使用base64时会产生相当大的开销。这是一个缺点。@JeremyBenks谢谢,是的,我添加了一个reduce函数来尝试并帮助解决这个问题。请记住:使用base64时会产生相当多的开销。这是一个缺点。@JeremyBenks谢谢,是的,我添加了一个reduce函数来尝试并帮助解决这个问题