Каков наилучший способ удаления изображения в MVC? - PullRequest
4 голосов
/ 05 декабря 2010

Я создал приложение MVC, где вы можете загружать изображения. Я храню их в файловой системе, и если файл существует, я показываю его, и я не использую SQL для отслеживания файлов.

У меня есть строка IList с указанием foreach. но теперь мне нужно удалить конкретное изображение, и я не уверен, как реализовать его в MVC, потому что я могу идентифицировать изображение только по имени изображения.

Может ли кто-нибудь показать мне лучший способ управления фотографиями в моем сценарии. Заранее спасибо

Ответы [ 4 ]

4 голосов
/ 10 декабря 2010

Вы просили привести пример, так что поехали. Давайте представим, что вы хотите удалить картинку, хранящуюся в /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.

1 голос
/ 05 декабря 2010

Вам захочется взглянуть на System.Web.HttpServerUtility.MapPath. Вы можете указать ему виртуальный путь к изображению (/images/picture.jpg), и он вернет вам абсолютный путь (C: \ web \ mysite \ images \ picture.jpg). Теперь вы можете удалить изображение.

0 голосов
/ 05 декабря 2010

Теперь вы точно знаете, как интерпретировать ваш вопрос ... MVC кажется совершенно неконтролируемым.

Но ... На мой взгляд, у вас есть контроллер с именем ImageController с действием под названием Delete.Действие принимает параметр FormCollection, который при вызове содержит имя изображения.

Поэтому, когда вы удаляете, у вас есть форма, которая выполняет POST для ImageController-> Delete Action и передает имя изображенияс этим.Название изображения содержится в скрытом поле.

В качестве дополнительного примечания: Использование имени в качестве идентификатора может быть не очень хорошей идеей.Одна из причин - атаки через каталог.Например, вместо имени изображения указывается «... / .. / .. /».Если вы плохо разбираетесь в белых списках / проверке вводимых данных, такая атака, скорее всего, будет возможна.

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

0 голосов
/ 05 декабря 2010

Не уверен, что понял проблему, MVC или что-то еще: это не важно. Изображение - это файл на сервере, поэтому вы можете удалить его, как любой другой файл, например, используя Server.Mappath для разрешения FileInfo и воспроизведения на нем.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...