【问题标题】:Stream file upload from client directly to s3 through ASP.net-core2 app通过 ASP.net-core2 应用程序从客户端直接将流文件上传到 s3
【发布时间】:2018-07-15 22:22:51
【问题描述】:

背景:用户有一个文件要上传,并与其他一些多格式文本数据配对。这是 POST'd 到我们的 ASP.net core 2 应用程序,然后围绕所述文件的成功下载构建了一些逻辑。

我知道我可以生成一个预签名的 S3 URL 供客户端使用,但我们希望避免这种情况。

我遇到的问题是无法将文件直接流式传输到 S3。我们可以将文件保存在本地,然后将该文件流式传输到 S3(成功),但我们希望避免这种情况,因为我们会遇到缩放问题。如果可能,我们希望尽量减少数据缓存以流式传输到 S3,并且不将任何文件本地保存到磁盘以供上传。

我尝试了多种口味

TransferUtility.UploadAsync(stream, ...)  
IAmazonS3.UploadPartAsync(...)  
IAmazonS3.UploadObjectFromStreamAsync(...)  

https://docs.aws.amazon.com/AmazonS3/latest/dev/LLuploadFileDotNet.html

还有一些我已经记不起来的其他方式了。

这是我在大多数尝试中遇到的一个(如果不是主要的)问题https://github.com/aws/aws-sdk-net/issues/675

如何使用提供的 HTTP 流将所述数据上传到 S3?

这就是我在结果控制器中处理文件流的方式:

[HttpPost("myupload")]
public async Task<IActionResult> TestBlobAsync()
{
    result = await this._internMethod(Request);
}

我正在使用以下 POSTMAN HTTP 配置文件测试我的软件

POST /api/result/myupload HTTP/1.1
Host: localhost:62788
Content-Type: multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW
Cache-Control: no-cache
Postman-Token: a17bef73-6015-c547-6f41-bc47274cb679

------WebKitFormBoundary7MA4YWxkTrZu0gW
Content-Disposition: form-data; name="result"; filename="dummy-35MB.bin"
Content-Type: application/octet-stream


------WebKitFormBoundary7MA4YWxkTrZu0gW
Content-Disposition: form-data; name="value1"

2
------WebKitFormBoundary7MA4YWxkTrZu0gW
Content-Disposition: form-data; name="value2"

8
------WebKitFormBoundary7MA4YWxkTrZu0gW--

如果我可以提供任何其他详细信息,请告诉我。

【问题讨论】:

    标签: c# asp.net amazon-s3 streaming asp.net-core-2.0


    【解决方案1】:

    我的解决办法是改变

    [HttpPost("myupload")]
    public async Task<IActionResult> TestBlobAsync()
    {
        result = await this._internMethod(Request);
    }
    

    [HttpPost("myupload")]
    public async Task<IActionResult> TestBlobAsync(IFileForm file)
    {
        ...
    }
    

    我现在可以使用 Stream stream = file.OpenReadStream() 并将其传递给 TransferUtility.UploadAsync(stream, ...) 并成功解决了我手动利用 Request 对象时缺少内容长度的问题。

    【讨论】:

      猜你喜欢
      • 2010-09-12
      • 2014-12-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-22
      • 1970-01-01
      相关资源
      最近更新 更多