1
AWSSDK.S3ナゲットパッケージを使用して、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