0

アップロードされたファイルが内部ネットワーク共有に保存されているという、あまり理想的ではない状況があります。そのため、データベースにファイルが保存された場所へのパスを保存していますが、ファイルがデータベースの同期から削除される可能性は十分にあります。そのため、コントローラー アクションでアップロード情報を検索し、正しいことを確認します。それは次のように要約できます。

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 タブなので、それほど大きなものではありませんが、それでも大きな不便です)。

珍しいことではないように思われるので、他の人がこの状況にどのように取り組んだかを探しています. または、これをもう少しユーザーフレンドリーにするためのフィードバックさえあります。私はファイルがどこに保存されているかについて発言権を持っていないので、それを変更することはできません。

4

1 に答える 1

-1

使用できるアクション結果にはさまざまなタイプがあります。

通常、ビュー以外のものを出力するコントローラー メソッドがある場合は、ContentResult アクションを使用します。

public ContentResult GetUploadedFile(int uploadId){

一部の結果タイプは次のとおりです。

  1. ViewResult – HTML とマークアップを表します。
  2. EmptyResult – 結果がないことを表します。
  3. RedirectResult – 新しい URL へのリダイレクトを表します。
  4. JsonResult – AJAX アプリケーションで使用できる JavaScript Object Notation の結果を表します。
  5. JavaScriptResult – JavaScript スクリプトを表します。
  6. ContentResult – テキスト結果を表します。
  7. FileContentResult – ダウンロード可能なファイル (バイナリ コンテンツを含む) を表します。
  8. FilePathResult – ダウンロード可能なファイル (パス付き) を表します。
  9. FileStreamResult – ダウンロード可能なファイルを表します (ファイル ストリームを使用)。

ここから取ったリスト

于 2009-12-15T16:51:50.733 に答える