2011-09-14 4 views
2

私のASP.NET MVCアプリケーションはアップロードされたファイルを受け入れ、これらを単一のフォルダに保存します。しかし、ユーザーがファイルをアップロードするときに、ファイル名を受け入れるようにしたいのですが、ユーザーが同じファイル名でファイルをアップロードしようとすると失敗します。アップロードされたファイルのユニークなファイル名/場所を作成するための戦略

私はファイルごとに別々のフォルダを作成できたと思いますが、私はきれいでフラットなディレクトリ構造を望みます。現在、ファイル名にGUIDを追加していますが、ユーザーがファイルをダウンロードしたときに奇妙なファイル名になるため、これは素晴らしい解決策ではありません。 私はファイルデータをデータベースに格納し、それが要求されたときにファイルに書き出すことを考えましたが、これはオーバーヘッドが大きくなります。

代替アプローチはありますか?

答えて

3

ディレクトリ構造をフラットに保つには、GUIDを追加してファイルを保存します(すでに行ったように)。ダウンロードハンドラ(コントローラアクションメソッド)で、まずファイル名からGUIDを削除して、GUIDベースのファイル名を元のファイル名に変換します。次に、FileContentResultクラスを使用してファイルを転送します。 FileDownloadNameプロパティを設定して、転送するファイルのファイル名を指定することができます。実際にはFileDownloadNameプロパティはContent-Dispositionヘッダーをフードの下に設定します。ここで

は、小さなコード例(ダウンロードのコントローラクラスのアクションメソッド)です。

string fileToDownload = "test.jpg_4274B9D4-9084-441C-9617-EAD03CC9F47F"; 

string originalFileName = fileToDownload.Substring(0, fileToDownload.LastIndexOf('_')); 

FileContentResult result = new FileContentResult(
    System.IO.File.ReadAllBytes(Server.MapPath(String.Format("~/files/{0}", fileToDownload))), "application/binary"); 

result.FileDownloadName = originalFileName; // Sets the Content-Disposition header 

return result; 

ファイルをダウンロードするユーザーは、元のファイル名でファイルを保存/開くように要求されます。

希望、これは役立ちます。

関連する問題