0

画像をレンダリングするMVC3アプリケーションにかなり単純なアクションがあります...

  public FileStreamResult Photo(int id)
    {
        //get the raw bytes for the photo
        var qry = from p in db.Photos
                  where p.PhotoID == id
                  select p.PhotoData;
        var data = qry.FirstOrDefault();

        var mem = new MemoryStream(data);
        var fs = new  FileStreamResult(mem, "image/jpeg");
        return fs;
    }

これを実行すると、Chromeで空白のドキュメントが表示され、Firefoxは実際のドキュメント領域にURLを表示し、IEは生のバイトをレンダリングします。

Chromeからメッセージが表示されます:リソースはドキュメントとして解釈されますが、MIMEタイプimage/jpegで転送されます

これは、ストリームデータがブラウザに送信されておらず、実際には空のドキュメントを受信して​​いることを示唆していますが、IEはその逆を示唆しています。

誰かが以前にこれに遭遇したか、それを回避する方法を知っていますか?

4

1 に答える 1

3

写真のバイト配列が既にある場合は、ストリームは必要ありません。

public ActionResult Photo(int id)
{
    var data = db.Photos.FirstOrDefault(p => p.PhotoID == id);
    if (data == null)
    {
        return HttpNotFound();
    }
    return File(data.PhotoData, "image/jpeg");
}

あなたのコードの問題は、最初にメモリストリームをリセットする必要があることですが、私が言ったように、これはすべて必要ではありません。

于 2011-07-04T06:25:33.567 に答える