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

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

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

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

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

zipFile为输入文件对象(用户上传)。

我在 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 中效果不佳,最好 post 将其作为多部分表单数据。

但是如果你真的需要 post 它作为一些服务器限制的 json 那么最好的是将它作为 base64

发送

快速修复只是将 readAsText 更改为 readAsDataURL 然后在服务器端使用 Convert.FromBase64String

将其转换回二进制
byte[] data = Convert.FromBase64String(encodedString);