2009-10-05 3 views
17

Когда я установил свойство URL изображения в asp-элемент управления изображением, находящийся в папке App_Data, изображение отображается в режиме просмотра страницы, но не в браузере.Изображения, которые находятся в папке App_Data, не отображаемой в браузере

<form id="form1" runat="server"> 
<div> 
    <asp:Image ID="Image1" runat="server" ImageUrl="~/App_Data/p3.jpg" /> 
</div> 
</form> 

Это кажется простым, но оно не показывает изображение.

ответ

38

Папка App_Data является специальной папкой, зарезервированной для данных, таких как файлы базы данных и т. Д., И будет NOT визуализировать любое содержимое в Интернете. Это по дизайну, преднамеренному и не может быть изменено (насколько я знаю).

Ваши изображения определенно не входят в подпапку App_Data - поместите их в папку /images или что-то более подходящее.

8

Изображения не должны храниться в папке App_Data. Это зарезервировано для файлов, которые никогда не должны обслуживаться непосредственно пользователю, например, файлы базы данных .mdb и т. Д.

Я бы создал папку или /Resources/Images с корнем сайта.

+0

Спасибо Chris ... –

+0

Привет всем, Но проблема в том, что я пытаюсь создать папку «/ Resources/Images» в корне, после чего я получаю отказ в доступе. (Когда сайт размещен в IIS) .WHat is лучший подход для создания каталога в корневой папке для учетной записи пользователя IIS w./o, дающей разрешение учетной записи пользователя во всей корневой директории? Возможно ли вообще? .I получить ошибку отказа в доступе, когда я пытаюсь создать каталог внутри root , – Sagar

3

Хорошо, время сделать невозможное ... Хотя вы не можете загружать изображения непосредственно из папки app_data, вы можете написать собственный обработчик http, который будет считывать файл изображения из папки app_data и отправлять его клиенту. Это будет работать, но в целом данные предназначены для данных, которые может читать только ваше приложение. Имея обработчик, считывающий данные, вы все равно можете вернуть эти изображения.

Но это плохая практика, и если вы будете работать на меня, вас сразу же уволят!

+2

Даже думать о том, как обойти asp.net, чтобы позволить изображениям быть поданными из app_data, является плохой идеей ... –

+0

Спасибо, что поделились идеей. –

+2

@ Крис, я согласен! Я выстрелю в себя! ;-) –

4

Я не согласен. При скрытии изображений в папке App_Data и создании собственного HTTP-обработчика вы защищаете свои изображения и можете добавлять текст об авторских правах и т. Д. На изображения перед их показом.

Я делаю это, когда у меня есть фотографии высокого разрешения, и я не хочу, чтобы все получили, и с помощью http-обработчика снимок изображения и надел какой-то авторский текст. Большой!

0

Содержимое из папки App_Data может обслуживаться, но не напрямую.
Прямой доступ невозможен и не рекомендуется. Это намеренно.

однако добавление виртуального пути может это сделать. question


Я думаю, что первая тройка ответов служит вашей цели.
Храните изображения в папке ресурса, как глобальные, так и локальные, а также специальные папки, и доступ к содержимому может быть осуществлен программно.

0

Всё зависит! ;)

Имеются веские причины для сохранения изображений в App_Data. В ситуациях, когда ваши пользователи могут загружать свои файлы или логотипы, они будут защищать эти файлы, а не делать их доступными для других пользователей или быть общедоступными.

Самое главное, это единственный способ иметь разные файлы на сервер/экземпляр развертывания.

При развертывании приложения вы можете защитить эти файлы, загруженные пользователями на экземпляр сервера, включив «Исключить файлы из App_Data» в вашей конфигурации развертывания.

Если вы хотите получить доступ к этим файлам с помощью url, используйте обработчик загрузки, например downloadfile.ashx.

Надеюсь, это поможет.