我正在使用.Net Framework 4.7 ASP.NET Web Api
将文件上传到端点后,我发现文件已损坏。
[HttpPost]
public async Task UploadFile([FromODataUri] string key)
{
if (!Request.Content.IsMimeMultipartContent())
{
throw new HttpResponseException(HttpStatusCode.UnsupportedMediaType);
}
var provider = await Request.Content.ReadAsMultipartAsync(new MultipartMemoryStreamProvider());
var file = provider.Contents.Single();
//get a corrupted file + size of file has increased significantly
var fileBytes = await file.ReadAsByteArrayAsync();
}
*我还尝试过使用ReadAsStreamAsync,然后读取所有字节,但看起来数据仍在更改...
我在做什么错? 谢谢, 阿迪。
答案 0 :(得分:0)
尝试ReadAsAsync<byte[]>()
ReadAsByteArrayAsync()
和ReadAsAsync<byte[]>()
实际上是不同的。
ReadAsAsync<byte[]>()
将按原样返回byte [],而无需额外的编码
ReadAsByteArrayAsync()
返回以base64编码的字节数组,因此如您所注意到的,文件的大小已增加。因此,您需要从base64转换以获得所需的结果。
string base64String = Convert.ToBase64String(await file.ReadAsByteArrayAsync());
byte[] fileBytes = Convert.FromBase64String(base64String);
还可以尝试
string base64String = await file.ReadAsStringAsync();
byte[] fileBytes = Convert.FromBase64String(base64String);
答案 1 :(得分:0)
由Owin处理程序负责错误。 直到现在都没有解决方案。只是建议不要打扰它,而只是为文件上传创建另一个服务。 祝好运, 还在等待答案。