ASP.NET Web API上的文件上传端点损坏了文件

时间:2019-05-23 13:01:44

标签: c# asp.net .net api file-upload

我正在使用.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,然后读取所有字节,但看起来数据仍在更改...

我在做什么错? 谢谢, 阿迪。

2 个答案:

答案 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处理程序负责错误。 直到现在都没有解决方案。只是建议不要打扰它,而只是为文件上传创建另一个服务。 祝好运, 还在等待答案。