从MVC控制器

时间:2017-09-04 02:45:20

标签: asp.net-mvc asp.net-mvc-4 amazon-s3

我有一个asp.net MVC应用程序,它目前将上传的图像和文件存储在SQL Server FileTable中。

当用户请求文件时,它直接从FileTable路径流式传输,如此...

Return New FilePathResult(file_path, content_type)

该网站使用CloudFront缓存视图,文件,图像等。

这一切都很棒。它快速而强大。但是FileTable对于托管来说有点问题,因为它不受Azure SQL或Amazon RDS等的支持。我想从Web服务器上管理我自己的SQL服务器实例转移。

我想要做的是转换为使用S3进行文件和图像存储,但仍然继续从MVC流式传输内容。我知道从S3直接提供文件可能是长期有意义的,但这需要相当多的重新工作。

我正在寻找的是从S3检索对象,然后将其作为FileResult流式传输到浏览器的简单,可靠的方法。我并不过分关注性能,因为CloudFront无论如何都会缓存内容。

我尝试了以下操作......

Public Function TestAWS() As FileResult
    Using client As New AmazonS3Client()
        Using _response = client.GetObject(New GetObjectRequest With {.BucketName = "mybucket",.Key = "my_file.txt"})
            Using _stream = _response.ResponseStream
                Return New FileStreamResult(_stream, "text/plain")
            End Using
        End Using
    End Using
End Function

但它不起作用。

我有什么方法可以使用S3流,并以某种方式直接将其复制到控制器输出流?

我正在做的事情是否可行,或者我是否需要在本地保存文件,然后使用FilePathResult返回该文件?

更新:我最终只是在本地保存文件,然后用FilePathResult返回它。这也让我有机会缓存​​文件,略微提高性能。

0 个答案:

没有答案