2011-02-10 1 views
0

У меня есть система объявлений на ASP.NET/c#/MS SQL, и я пытаюсь выяснить, где хранить изображения, которые люди загружают при размещении рекламы. Само объявление хранится в базе данных SQL-сервера.В какой папке можно хранить загруженные пользователем изображения

Изображения теперь хранятся в подпапках моего webapp. Кажется, что все хорошо, но я только недавно обнаружил большую проблему. Каждый раз, когда пользователь удаляет объявление, прикрепленные изображения также должны быть удалены, включая папку, в которой они находятся. Это приводит к перезапуску приложения asp.net. Я искал Интернет и обнаружил, что перезапуск веб-приложения на самом деле является предполагаемым поведением при удалении вложенной папки.

Очевидно, мне нужно исправить это. Но как это сделать? Где я могу хранить изображения таким образом, чтобы:

  • Я могу удалить эти изображения, включая папки, в которых они хранятся?
  • Я могу Acces их с помощью URL (изображения должны быть показаны в веб-страниц)
  • Без получения веб-приложение будучи перезапущен? Любая обратная связь приветствуется! Пол

ответ

0

Смотрите этот вопрос Deleting a directory results in application restart

Другим альтернативой было бы хранить изображения в БД вместо этого.

+0

Удаление каталога ... да, я нашел это из-за трудного пути ... Хранение в БД? Это сделало бы БД очень большой и дорогой. Я бы предпочел предотвратить это. Благодаря! –

-2

Возможно, вы можете хранить изображения в SQL (проверьте в этом случае функцию фильтрации) Если нет, я полагаю, что у вас есть где-то в классе бизнес-фасада, классе обслуживания или где угодно, методе «УдалитьAd», ,

Этот метод будет делать две вещи:

-удалено SQL-данных -удалено файл изображения

также, вы можете изменить хранилище изображений в другую папку, вне веб-приложения. Вероятно, вы закончите писать пользовательский обработчик (myhandler.ashx? Fileid = XX), чтобы обслуживать файлы, или настраиваемый маршрут и управление, если вы используете MVC.

+0

Поскольку само объявление уже хранится в базе данных, я думаю, что хранение изображений там тоже было бы хорошим решением. – Koen

+0

вам просто нужно быть осторожным при воздействии на производительность. Хранение изображений в БД будет намного медленнее, чем чистый доступ к файлам. Вот почему я предложил использовать функцию filestream для SQL 2008. Вы также можете полагаться на механизм кэширования asp.net или на комбинацию из двух. –

+0

Thanx Стив и Koen. Хранение изображения в БД было бы здорово, логично ... но я не вижу его в качестве хорошего решения. Кроме того, база данных будет расти чрезвычайно. FYI размер базы данных без изображений составляет всего 10% от папки, содержащей изображения. –

0

Другим вариантом было бы поместить изображения в каталог, полностью не связанный с веб-сайтом, а затем обслуживать изображения через страницу или обработчик сценария. Это сделало бы все ваши образы изображений похожими на mydomaincom/serveimage.aspx?imageid=323422, но если вы не рассчитываете на имя где-то, что действительно не имеет большого значения. Очевидно, для этого потребуется изменение страницы, которая также служит для изображений в первую очередь, но если удалены вспомогательные каталоги этого несвязанного каталога, IIS действительно не заботится вообще.

+0

Написание пользовательского обработчика?Это идеальное решение. Я помещаю папку со всеми изображениями объявлений где-то вне папки webapp ... Мне придется немного подумать об этом. Загрузка файла должна измениться, ad.view, ad.publish, ad.delete ... Один беспокойство было бы, если бы мой «пользовательский» обработчик, написанный на C#, был бы менее эффективным, чем по умолчанию, оптимизированный, я использую прямо сейчас ... Может быть, я должен подумать о настройке URL-адреса в httpmodule, поэтому я могут поддерживать обработчики изображения по умолчанию? –