【问题标题】:ASP.NET 5 Upload file to API stream and pass to MongoDB GridFSASP.NET 5 将文件上传到 API 流并传递到 MongoDB GridFS
【发布时间】:2021-10-24 08:16:49
【问题描述】:

我正在尝试创建一个 ASP.NET API 端点,它接受 multipart/form-data POST 请求,在流中处理它,并使用 GridFS 流上传将其异步上传到 MongoDB。本质上,我不想在 API 服务器的磁盘上缓冲整个文件,而是尽可能少地在内存中运行它。

到目前为止,我一直在查看各种文档(例如 thisthis),试图了解它是如何链接在一起的,但我一直被诸如过时的库和缺少一些解释的困扰MultipartReader 之类的类我不是很懂。

我的代码目前有一个服务类来处理上传到 MongoDB 的方法如下:

public async Task<string> UploadFromStreamAsync(Stream stream, string filename)
{
    var id = await _bucket.UploadFromStreamAsync(filename, stream);
    return id.ToString();
}

我还有一个 UploadsController 类,它扩展了 ASP.NET 的 ControllerBase 并提供了一种处理 HTTP POST 请求的方法。如何连接这两个类,以便控制器拾取上传部分并将它们以流的形式传递给上传服务,以便文件可以在上传到 API 服务器的同时上传到 MongoDB?

我使用的是 ASP.NET 版本 5。

【问题讨论】:

    标签: asp.net mongodb .net-5 gridfs c#-9.0


    【解决方案1】:

    这就是我最终做的,但我不知道如何验证是否满足无缓冲要求。此实现可能会在同时上传多个文件时出现扩展问题,但我不确定。

    [HttpPost]
    public async Task<ActionResult<FileUploadResponse>> FileUpload(IFormFile file)
    {
        if (file.Length <= 0) return BadRequest();
                
        var fileId = await _fileUploadService
            .UploadFromStreamAsync(file.OpenReadStream(), file.FileName);
                
        return Ok();
    }
    

    问题中的FileUploadService 保持不变。

    【讨论】:

      猜你喜欢
      • 2014-08-07
      • 2012-03-22
      • 2012-11-17
      • 1970-01-01
      • 2015-07-18
      • 2020-03-20
      • 2020-12-07
      • 1970-01-01
      • 2021-07-07
      相关资源
      最近更新 更多