Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/264.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中创建二进制字符串并在C中转换#_Javascript_C#_Typescript_Filereader - Fatal编程技术网

在Javascript中创建二进制字符串并在C中转换#

在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

我的JavaScript应用程序中有一个文件上传区域。当我上传文件时,我使用JSFileReader获取上传文件的二进制字符串。然后我将其传递给我的C#WebApi,并尝试将其写入文件,以便将其存储在服务器上

JS代码

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函数来尝试并帮助解决这个问题