Javascript-发送编码二进制(zip)文件数据并在c#中对其进行解码

Javascript - sending encoding binary (zip) file data and decoding it in c#

本文关键字:解码 数据 编码 二进制 文件 zip Javascript-      更新时间:2023-09-26

我有zip文件,我想将其编码并发送为字符串,解码并保存在服务器端:

这是客户端中编码的代码(JS(:

var fileAsText = ''
var reader = new FileReader()
reader.onload = function (event) {
  fileAsText = encodeURIComponent(event.target.result)
}
reader.readAsText(zipFile)

zipFile是输入File对象(由用户上传(。

我在JSON中作为Post发送的fileAsText字符串(这就是我使用encodeURIComponent的原因(

一切都很好,但在服务器端,我想把这个字符串解码回二进制文件(zip文件(并提取它。我想让与用户在客户端上传的文件完全相同。

这是我在c#:中的代码

 using (var bw = new BinaryWriter(File.Open("fileTest.zip", FileMode.Create)))
 {
      bw.Write(HttpUtility.UrlDecode(fileAsText));
 }

问题:我没有得到相同的文件(二进制数据不同(我认为解码器HttpUtility.UrlDecode不适合encodeURIComponent

知道如何获得用户上传的相同文件二进制数据吗?

二进制字符串在javascript中不能很好地工作。最好将其作为多部分表单数据发布。

但是,如果你真的需要将其作为json发布,因为服务器有一些限制,那么最好是将其作为base64 发送

快速解决方法是将readAsText更改为readAsDataURL然后在服务器端使用Convert.FromBase64String 将其转换回二进制

byte[] data = Convert.FromBase64String(encodedString);