FileStreamResultとFilePathResultの違いは?
-
21-08-2019 - |
質問
私は画像を返す単純なコントローラを持っています:
public class ImageController : Controller
{
[AcceptVerbs(HttpVerbs.Get)]
[OutputCache(CacheProfile = "StationeryImageCache")]
public FileResult Show(int customerId, string imageName)
{
try
{
var path = string.Concat(Config.ImageDir, customerId, @"\", imageName);
return new FileStreamResult(new FileStream(path, FileMode.Open), "image/jpeg");
}
catch(System.IO.FileNotFoundException ex)
{
throw new MissingImageException(imageName);
}
}
}
私のマネージャーは、コードレビューの間FileStreamResultに気づき、私はそれを交換する必要があり述べます:
return new FilePathResult(path, "image/jpeg");
私はそれをしなかったので、これは私には意味を成していました。しかし、数日後に当社の他の開発者の一つは、私が戻った画像の一部が戻って破損した来ていたことを報告しました。具体的には、いくつかの点で切断された画像がたくさんありました。画像のサイズは正しかったが、ボトム25% - 画像の40%は、単に消えていた
。 ファイルシステム上の元の画像を見ているときにそれには何の問題もありませんでした。私は、ブラウザで画像をploppedし、それが正常に見えました。しかし、私のコントローラは、画像のみの一部を返していました。さらに悪いことに、それが問題だっただけで、いくつかの画像...それらの約30%だった...私は仕事するものと、そうでないものとの間の特定の相違点を見つけることができませんねかかわらます。
これをデバッグしようとしますが、私は戻ってFileStreamResultにアクションの結果を元に戻すと、突然、すべてが再び働いていた。
誰もこれについての説明を知っていますか?
解決
FilePathResultに使用されているHttpResponse.TransmitFileが持っているか、いくつかの問題があったことが表示されます。それはあなたがこれに応じてサーバーを実行しているWindowsのバージョンに依存する場合があります修正プログラムに。あなたは「response.TransmitFileエラー」のようなもののためにGoogleで検索した場合は、エラーの多くを得ます。
私はあなたの元のコードを使用する必要がありますね!
所属していません StackOverflow