アップロードされたファイルが内部ネットワーク共有に保存されているという、あまり理想的ではない状況があります。そのため、データベースにファイルが保存された場所へのパスを保存していますが、ファイルがデータベースの同期から削除される可能性は十分にあります。そのため、コントローラー アクションでアップロード情報を検索し、正しいことを確認します。それは次のように要約できます。
public ActionResult GetUploadedFile(int uploadId){
var uploadedFile = Repository<Upload>.FirstOrDefault(upload => upload.ID == uploadID);
if(uploadedFile == default(Upload)){
return View("InvalidUpload");
}
if(File.Exists(uploadFile.Path)){
var fileInfo = new FileInfo(uploadFile.Path);
var contentType = HttpContext.GetMimeTypeForFileInfo(fileInfo) // my lookup extension method
return File(uploadFile.Path, contentType, uploadFile.Name);
}
return View("InvalidUpload");
}
問題は、このアクションが現在、AJAX を介して読み込まれるビューのリンクを介してアクセスできることです。そのため、ファイルが存在し、問題がなければ、標準の「このファイルで何をしますか」ダイアログがブラウザに表示され、コンテンツがユーザーに表示されたままになります。問題は、コード内の他のパスです。ビューを返すと、ユーザーはまったく新しい URL に移動します。そして、クリックして戻ると、元の場所にリセットされます (基本的には動的な jQuery タブなので、それほど大きなものではありませんが、それでも大きな不便です)。
珍しいことではないように思われるので、他の人がこの状況にどのように取り組んだかを探しています. または、これをもう少しユーザーフレンドリーにするためのフィードバックさえあります。私はファイルがどこに保存されているかについて発言権を持っていないので、それを変更することはできません。