2010-12-05 41 views
4

イメージをアップロードできるMVCアプリケーションを作成しました。私はそれらをファイルシステムに保存しています。ファイルが存在する場合はそれを表示していますが、SQLを使用してファイルを追跡していません。MVCで画像を削除する最も良い方法は何ですか?

私はforeachでそれらを表示するIList文字列を持っています。しかし、今私は特定のイメージを削除する必要があり、私はimagenameだけでイメージを識別することができますので、MVCでそれを実装する方法がわかりません。

誰かが私のシナリオで写真を管理する最善の方法を教えてもらえますか?事前にありがとう

答えて

1

System.Web.HttpServerUtility.MapPathを見てみましょう。イメージの仮想パス(/images/picture.jpg)を指定すると、絶対パス(C:\ web \ mysite \ images \ picture.jpg)が返されます。これで画像を削除できます。

0

MVCなどの問題を理解できないことは重要ではありません。 Imageはサーバー上のファイルなので、他のファイルと同様に削除できます。たとえば、Server.Mapathを使用してFileInfoを解決し、Deleteを再生します。

+0

実装方法の例が必要です。私はそれを達成する方法を理解することはできません... – FastDevelopment

0

あなたの質問をどのように解釈するのか、今かなり確信しています... MVCは文脈からかなり外れているようです。

しかし、私が見るとおり、ImageControllerという名前のコントローラにはDeleteというアクションがあります。このアクションは、呼び出されるとイメージの名前を含むFormCollectionパラメータを受け取ります。

あなたが削除するときに、ImageController-> DeleteアクションへのPOSTを実行するフォームがあり、それと一緒にイメージの名前が渡されます。画像の名前は隠しフィールドに含まれています。

サイドノートとして:アイデンティティーとして名前を使用することは、あまり良い考えではないかもしれません。 1つの理由は、ディレクトリトラバーサル攻撃です。例:イメージ名の代わりに ".../../.. /"を指定してください。ホワイトリスト/入力されたデータの検証でうまくいかない場合は、この種の攻撃が可能です。

http://en.wikipedia.org/wiki/Directory_traversal

+0

それは右のような音が私に例を示すことができますか?ありがとう – FastDevelopment

4

あなたは、例えば尋ねたので、ここで私達は行きます。 "/pics/path/mypic.jpg"に保存されている画像を削除したいとします。 まず、画像の物理パスを取得し、パス変数に格納する

string path = Server.MapPath("/pics/path/mypic.jpg"); 

を呼び出す必要があります。 は、次に、あなたが行うことができます。

FileInfo fi = new FileInfo(path); 
if(fi.Exists) 
    fi.Delete(); 
else 
    what you want to do if file does'nt exists. 

注:fi.Deleteを()ファイルが存在しない場合に例外をスローしません。

ディレクトリ内のすべてのファイルのリストを取得するには、Directory.GetFiles()またはDirectoryInfoインスタンスを使用できます。

関連する問題