を見てみることができ、あなたは「ストリーム」ファイルにTransmitFileを使用することができます。しかし、TransmitFileはいくつかのhttpクライアントでいくつか後方にあります。
これは、TransmitFileの代替として、ファイルをクライアントに「ストリームする」コードです。私は(あなたと同じOutOfMemoryを問題を持っている)のWriteFileをロールバックする一定の設定を持っていたことに注意してください:
private void RenderContent(string contentType,string fileName, bool inline);
メソッドコード:
FileInfo fi = new FileInfo(fileName);
Response.ClearHeaders();
Response.ClearContent();
Response.ContentType = contentType;
Response.CacheControl = "No-cache";
Response.Cache.SetCacheability(System.Web.HttpCacheability.NoCache);
Response.AddHeader("Content-Length", fi.Length.ToString());
Response.AddHeader("Content-Disposition", (inline ? "inline" : "attachment") + "; filename=\"" + fi.Name + "\"");
if (cAppInfos.Constant["FallBackToWriteFile"] != null && cAppInfos.Constant["FallBackToWriteFile"] == "true")
{
Response.WriteFile(fileName);
}
else
{
int chunkSize = 8192;
byte[] buffer = new byte[chunkSize];
int offset = 0;
int read = 0;
using (FileStream fs = File.Open(fileName, FileMode.Open, FileAccess.Read, FileShare.Read))
{
while ((read = fs.Read(buffer, offset, chunkSize)) > 0)
{
if (!Response.IsClientConnected)
break;
Response.OutputStream.Write(buffer, 0, read);
Response.Flush();
}
}
}
私は中にいくつかの問題を避けるために、このコードを使用しましたpdfファイルを古いacrobat readerプラグインにストリーミングする。インライン・パラメータの場合は、「false」を使用できます。
さらに、クライアントが切断された場合、Response.IsClientConnecter/Write/Flushのいずれかが例外をスローする可能性があるため、このコードをtry/catchで使用できます。
しかし、私はMVCを使用していないし、TransmitFileを使用していないかのように、このコードで同じ問題が発生する可能性があります。 Webページ要素にファイルを埋め込む場合(これはおそらくbase64のように)、これは解決策ではありません。
あなたの目標を達成するための他の方法が必要な場合は、要件に関する詳細情報をお知らせください。
感謝次のエラーが発生しました: 'サービスタイプWebHostBufferPolicySelectorはサポートされていません。 –
QuestionはWeb APIではなくMVCに関するものです –