FileResultを使用して、ユーザーがAsp.Net MVCアプリケーションからファイルをダウンロードできるようにすることを提案しました。しかし、私が見つけることができる唯一の例は、常に画像ファイル(コンテンツタイプimage / jpegを指定)に関係しています。
しかし、ファイルの種類がわからない場合はどうなりますか?ユーザーが私のサイトのfileareaからほとんどすべてのファイルをダウンロードできるようにしたい。
私はこれを行う1つの方法(コードについては以前の投稿を参照)を読みましたが、1つを除いて実際に問題なく機能します。[名前を付けて保存]ダイアログに表示されるファイルの名前は、下線付きのファイルパスから連結されます( folder_folder_file.ext)。また、私がBinaryContentResultを見つけたこのカスタムクラスを使用する代わりに、FileResultを返す必要があると人々は思っているようです。
MVCでこのようなダウンロードを行う「正しい」方法を知っている人はいますか?
編集:私は答え(下)を得ましたが、他の誰かが興味を持っているなら私は完全な作業コードを投稿するべきだと思っただけです:
public ActionResult Download(string filePath, string fileName)
{
string fullName = Path.Combine(GetBaseDir(), filePath, fileName);
byte[] fileBytes = GetFile(fullName);
return File(
fileBytes, System.Net.Mime.MediaTypeNames.Application.Octet, fileName);
}
byte[] GetFile(string s)
{
System.IO.FileStream fs = System.IO.File.OpenRead(s);
byte[] data = new byte[fs.Length];
int br = fs.Read(data, 0, data.Length);
if (br != fs.Length)
throw new System.IO.IOException(s);
return data;
}
Response.ContentType = MimeMapping.GetMimeMapping(filePath);
からcontent-typeをとして設定すると便利です