Пользовательский сервер управления и обработки изображений - PullRequest
2 голосов
/ 09 февраля 2012

В настоящее время я пытаюсь создать собственный серверный элемент управления в asp.net c # и использую VS2010.

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

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

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

Местоположение изображения -> Пользовательский элемент управления -> Веб-страница с изображением, которое было передано в пользовательский элемент управления.

Кто-нибудь знает, как это сделать, или пойти по этому поводу?

UPDATE:

Извините, я не был достаточно ясен в первый раз.

У меня есть два проекта, один пользовательский проект управления и один проект веб-сайта asp.net. Первый проект (Custom Control) берет поток байтов от веб-сервиса и преобразует его в объект Image. На данный момент я хочу, чтобы элемент управления добавил это изображение на веб-страницу на веб-сайте. Затем пользовательский элемент управления регистрируется на веб-сайте asp.net, а добавленные мной элементы управления отображаются на странице. Однако я хочу сделать изображение, которое я восстановил из буфера, а затем преобразовать в файл локально на веб-странице.

У меня нет проблем с получением изображения из потока байтов и сохранением изображения в каталоге. Проблема, с которой я столкнулся, заключается в том, что я хочу, чтобы изображение отображалось на веб-странице без предварительного сохранения изображения в веб-проекте. Я думал о хранении изображения в веб-каталоге, поэтому при запуске проекта я могу установить URL-адрес изображения в localhost / images / myimagefrombystream.jpg, но не уверен, является ли это правильным подходом.

Есть идеи?

Ответы [ 4 ]

1 голос
/ 15 февраля 2012

У нас есть библиотека серверных элементов управления, которая содержит изображения, которые повторно используются в ряде других веб-проектов.

Подход, который мы выбрали, заключался в том, чтобы пометить каждое действие по сборке изображений как Embedded Resource. Затем в файле AssemblyInfo у нас есть такие строки:

[assembly: WebResource("AssemblyName.SubDirectory.ImageName.png", "image/png")]

Где AssemblyName - это фактическое имя проекта, SubDirectory - это каталог в проекте, в котором находятся изображения и т. Д.

Этот проект также испускает файлы CSS; которые также являются встроенными ресурсами. Файлы CSS ссылаются на эти изображения, используя:

.someImage {
    height: 85px;
    background-image: url(<%=WebResource("AssemblyName.SubDirectory.Image.png") %>);
    background-repeat: repeat-x;
    margin: 0px;
    padding: 0px;
}

В коде класса мы будем ссылаться на эти CSS-файлы, например:

HtmlLink cssLink = new HtmlLink();
cssLink.Href = Page.ClientScript.GetWebResourceUrl(this.GetType(), "AssemblyName.css.SomeCssFile.css");
cssLink.Attributes.Add("rel", "stylesheet");
cssLink.Attributes.Add("type", "text/css");

Мы могли бы так же легко обратиться к изображениям напрямую, используя что-то вроде выше.

На данный момент сборка на 100% портативна. Все CSS-файлы и необходимые изображения встроены в него, поэтому вам не нужно беспокоиться, если вызывающее приложение имеет те же изображения вообще.

Кстати, именно так поступают многие поставщики управляющих устройств; по крайней мере, лучше .

0 голосов
/ 09 февраля 2012

Я предполагаю, что вы создали этот пользовательский элемент управления в библиотеке классов. источника изображения является статическим (некоторый фиксированный базовый URL), и только это имя изображения изменяется, вы можете предоставить свойство ImageUrl (строку) и отобразить тег на основе атрибутов (все могут быть по умолчанию) с настраиваемым ImageUrl в качестве атрибута src тег.

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

0 голосов
/ 10 февраля 2012

Я не уверен, что понял вопрос, но все же позвольте мне попробовать.Насколько я понял, у вас есть два проекта: в одном вы хотите загрузить изображение в определенное место, а в другом вы хотите показать это изображение.Я бы просто имел элемент управления загрузкой файлов в 1-м приложении и использовал его для загрузки изображения в нужное место.В другом приложении вы можете использовать универсальный обработчик.Обработчик может получить имя файла изображения из 1-го приложения, используя параметры строки запроса, затем он найдет изображение на диске и вернет ответ с соответствующим заголовком, например:

response.ContentType = "image/jpeg";
response.OutputStream.Write(image, 0, (int)request.InputStream.Length);
response.Flush();
response.End();
0 голосов
/ 09 февраля 2012

Я не знаю, почему ты усложняешь. Просто добавьте ImageUrl свойство (не публичное поле) к своему пользовательскому элементу управления, ожидайте, что его установит клиентский код вашего элемента управления, и, если не ноль, в CreateChildControls добавьте элемент Image к дереву управления. В качестве альтернативы, всегда добавляйте изображение в дерево элементов управления, но делайте его видимым / невидимым внутри setter этого свойства (или в другом месте, которое вы считаете нужным). Честно говоря, я не понял половину того, что вы сказали, относящегося к вашему предполагаемому решению, поэтому я надеюсь, что не пропустил тему здесь:)

...