MVC3 アプリがあり、ユーザーはファイルをアップロードして、いつでも表示またはダウンロードできます。次のコードは、IE では期待どおりに動作します (ポップアップ ウィンドウが表示され、その中にファイルがレンダリングされます) が、Firefox では、[ファイルを保存して開く] ダイアログ ボックスが表示され、ポップアップ ウィンドウにファイルがレンダリングされません。Chrome では、ファイルが自動的にダウンロードされます。私のコードは次のとおりです。
//for brevity i'm not showing how i get the file stream to display,
//but that code works fine, also the ContentType is set properly as well
public class BinaryContentResult : ActionResult
{
private readonly string ContentType;
private readonly string FileName;
private readonly int Length;
private readonly byte[] ContentBytes;
public BinaryContentResult(byte[] contentBytes, string contentType, string fileName, int nLength)
{
ContentBytes = contentBytes;
ContentType = contentType;
FileName = fileName;
Length = nLength;
}
public override void ExecuteResult(ControllerContext context)
{
var response = context.HttpContext.Response; //current context being passed in
response.Clear();
response.Cache.SetCacheability(HttpCacheability.NoCache);
response.ContentType = ContentType;
if (ext.ToLower().IndexOf(".pdf") == -1)
{
//if i comment out this line, jpg files open fine but not png
response.AddHeader("Content-Disposition", "application; filename=" + FileName);
response.AddHeader("Content-Length", Length.ToString());
response.ContentEncoding = System.Text.Encoding.UTF8;
}
var stream = new MemoryStream(ContentBytes); //byte[] ContentBytes;
stream.WriteTo(response.OutputStream);
stream.Dispose();
}
}
私の見解は次のとおりです。
public ActionResult _ShowDocument(string id)
{
int nLength = fileStream.Length;//fileStream is a Stream object containing the file to display
return new BinaryContentResult(byteInfo, contentType, FileName,nLength);
}
PDF ファイルとプレーン テキスト ファイルの場合、これは全面的に機能しますが、jpg ファイルと png ファイルの場合は、ダウンロード ダイアログが表示されます。Firefox/Chrome で PDF ファイルを開くように、ポップアップで Firefox/Chrome のファイルを開くにはどうすればよいですか? ありがとう