【问题标题】:C# ReadAsByteArrayAsync result different from raw data and leads to file corruptionC# ReadAsByteArrayAsync 结果与原始数据不同并导致文件损坏
【发布时间】:2023-04-04 20:31:02
【问题描述】:

我正在使用 Resumeable.js(client) 和 C# MVC/WebAPI(Server) 编写文件上传服务。

在客户端,Resumeable.js 为上传的文件创建一个 blob,并构造一个多部分请求以将一些文件信息(名称、大小等)与 blob 一起包装。

在服务器端,我们使用 ReadAsMultipartAsync() 来解析多部分请求,并使用 ReadAsByteArrayAsync() 从文件中获取字节。

var parts = await Request.Content.ReadAsMultipartAsync();
...
// if parts contains file 
request.ChunkContent = currentPart.Contents.ReadAsByteArrayAsync().Result;

对于纯文本文件可以正常工作,但是,当我使用此文件上传服务上传 12kb .docx 文件时,ReadAsByteArrayAsync() 返回的字节数组与原始文件数据不同,前 16 个字节相同并且数组的大小增加到 18000+。 我检查了我们发送到服务器的字节在 Fiddler 中都是正确的。 使用 utf-8 编码并不能解决问题,有没有人遇到过同样的问题?

【问题讨论】:

  • 试试 await 而不是 .Result

标签: c# asp.net-web-api file-upload multipartform-data content-type


【解决方案1】:

在我的项目中我使用IdentityServer3框架,最近我升级到了2.6.0版本,从那以后问题就开始了。

如果是这种情况,只需降级到版本 2.5.0。

【讨论】:

  • 我们没有使用那个框架,仍然不知道是什么干扰了数据。我们最终使用基于 64 位的字符串而不是原始二进制数据作为解决方法。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-11-06
  • 2012-12-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多