首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >异步上传文件

异步上传文件
EN

Code Review用户
提问于 2019-02-08 18:50:02
回答 1查看 91关注 0票数 2

我需要你对我的执业意见。我想改进它。

所需经费如下:

  • RESTFUL + OWIN (SelfHosted)
  • 端点-异步上传文件
  • 从邮递员处向端点发出请求

好吧,这就是我得到的

对于自托管的OWIN,我遵循Microsoft文档。

自寄主

端点:

FileController.cs

代码语言:javascript
复制
    [HttpPost]
    [Route("api/v1/upload")]
    public HttpResponseMessage Post([FromUri]string filename)
    {
        var task = this.Request.Content.ReadAsStreamAsync();
        task.Wait();
        Stream requestStream = task.Result;

        try
        {
            Stream fileStream = File.Create("./" + filename);
            requestStream.CopyTo(fileStream);
            fileStream.Close();
            requestStream.Close();
        }
        catch (IOException)
        {
            throw new HttpResponseException( HttpStatusCode.InternalServerError);
        }

        HttpResponseMessage response = new HttpResponseMessage();
        response.StatusCode = HttpStatusCode.Created;
        return response;
    }

邮差:

邮递员返回状态代码201

EN

回答 1

Code Review用户

发布于 2019-02-08 19:30:11

看起来有点不必要的复杂,一点也不完全是异步的。您只是强迫异步调用与.Wait()同步。正确的方法是使用异步“一路向下”:

代码语言:javascript
复制
[HttpPost]
[Route("api/v1/upload")]
public async Task<HttpResponseMessage> Post([FromUri]string filename)
{
    try
    {
        using (Stream requestStream = await this.Request.Content.ReadAsStreamAsync())
        using (Stream fileStream = File.Create("./" + filename))
        {
            await requestStream.CopyToAsync(fileStream);
        }

        return new HttpResponseMessage { StatusCode = HttpStatusCode.Created };
    }
    catch (IOException)
    {
        throw new HttpResponseException(HttpStatusCode.InternalServerError);
    }
}
票数 5
EN
页面原文内容由Code Review提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://codereview.stackexchange.com/questions/213112

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档