1
使用AWSSDK.S3 nuget包,我試圖返回從S3存儲桶檢索到的文件。我的出發點是基於此SO answer中給出的示例。如何使用Amazon S3 ResponseStream返回FileResult?
例控制器代碼:
public FileResult GetFile(Guid id)
{
// no using block as it will be disposed of by the File method
var amazonResponse = _foo.GetAmazonResponseWrapper(_user, id);
// set Response content-length header
// set Response content-type header
var bufferSize = 1024;
var buffer = new byte[bufferSize];
int bytesRead;
while ((bytesRead = amazonResponse.ResponseStream.Read(buffer, 0, buffer.Length)) > 0 && Response.IsClientConnected)
{
Response.OutputStream.Write(buffer, 0, bytesRead);
Response.OutputStream.Flush();
buffer = new byte[bufferSize];
}
// this will not work (can't read from this stream)
return File(Response.OutputStream, "text/plain", "bar.txt");
}
如果我寫一個MemoryStream
我創建並在while
循環使用,我會得到一個文件,但不會有任何內容。
我發現文件中獲得內容的唯一方法是調用.ToArray()
在流像這樣:
return File(memStream.ToArray(), "text/plain", "foo.txt");
是否有實際流的文件瀏覽器的方式,而不加載到Web服務器的內存?
這看起來像是其中一個「它非常簡單,它必須以這種方式工作」的情況。我不確定使用中間流的原因,因爲我是AWS新手。我明天再說一遍這個問題,謝謝! – Jecoms
當然。它似乎是使用HttpResponse對象的控制器代碼。 – Jecoms
@Jecoms,我糾正了。這可能是早期版本。 – Nkosi