Как вы отображаете список изображений из папки на жестком диске на веб-сайте ASP.NET?

Я пытаюсь сделать простой сайт фотогалереи. Использование ASP.NET и С#. Прямо сейчас у меня нет настроенного сервера, но я просто использую разработку, которую запускает Visual Studio, когда вы создаете проект веб-сайта и запускаете его.

У меня есть папка на моем жестком диске, которая содержит неизвестное количество изображений. Я хочу написать фрагмент кода, который пройдет через каждое изображение и добавит его на веб-страницу по умолчанию. Я пробовал этот код, но он не работает. Что я делаю не так? Должен ли я использовать элемент управления ListView или DataView или что-то в этом роде? Нужно ли добавлять виртуальный каталог для доступа к изображениям? Если да, то как это сделать на этом тестовом сервере?

ТАКЖЕ, как мне установить положение и выравнивание этих изображений? Например, как я могу сделать это так, чтобы изображения были вертикально и центрированы на веб-странице?

protected void Page_Load(object sender, EventArgs e)
{
    string[] filesindirectory = Directory.GetFiles(@"C:\Users\Jordan\Desktop\Web Images");
    int i = 1;
    foreach (string s in filesindirectory)
    {
        Image img = new Image();
        img.ID = "image" + i.ToString();
        img.ImageUrl = s;
        img.Visible = true;
        Page.Controls.Add(img);
        i++;

    }

}

Ответы

Ответ 1

Сначала вам нужно поместить изображения, которые вы хотите отобразить под веб-деревом. Предположим, вы сделали это, и они находятся в папке "Изображения". Затем вы можете использовать элемент Repeater для отображения их путем привязки данных таким образом:

Что-то вроде этого...

<asp:Repeater ID="RepeaterImages" runat="server">
    <ItemTemplate>
        <asp:Image ID="Image" runat="server" ImageUrl='<%# Container.DataItem %>' />
    </ItemTemplate>
</asp:Repeater>

И затем в вашем коде позади:

protected void Page_Load(object sender, EventArgs e)
{
    string[] filesindirectory = Directory.GetFiles(Server.MapPath("~/Images"));
    List<String> images = new List<string>(filesindirectory.Count());

    foreach (string item in filesindirectory)
    {
        images.Add(String.Format("~/Images/{0}", System.IO.Path.GetFileName(item)));
    }

    RepeaterImages.DataSource = images;
    RepeaterImages.DataBind();
}

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

Ответ 2

Создается элемент <img> с URL-адресом C:\Users\Jordan\Desktop\Web Images\SomeImage.jpg. Очевидно, что это не будет работать в веб-браузере.

Скопировать изображения в подпапку вашего проекта и установить URL-адрес для относительного URL-адреса, например:

img.ImageUrl = "~/Web Images/" + Path.GetFileName(s);

(Предполагая, что папка Web Images является подпапкой корня приложения)

Ответ 3

Например

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

На веб-странице

    <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Images.aspx.cs" Inherits="ImageViewer" %>


    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head runat="server">
        <title>Viewer Demo</title>
        <link href='styles.css' rel='stylesheet' type='text/css' />
    </head>
    <body>
        <form id="form1" runat="server">
            <div id="outer">
                <h2>Viewer Demo</h2>
                <br />            
                <div style="clear:both;">
                    <h4>Using Viewer with the Repeater Control</h4>
                    <p>Repeater control to display a collection of images.</p>
                </div>
                <div style="clear:both;">
                <asp:Repeater ID="RepeaterImages" runat="server">
                    <ItemTemplate>
                        <asp:Image ID="Image" runat="server" ImageUrl='<%# Container.DataItem %>' />
                    </ItemTemplate>
                </asp:Repeater>
                </div>                
                <br />    
            </div>
        </form>
    </body>
    </html>

В вашем web.config

    <appSettings>
        <add key="FilePath" value="~/images"/>
    </appSettings>

и в вашем коде за .cs файлом Вам действительно нужно фильтровать файлы, если кто-то (возможно, вы;)) ставит ошибочные файлы в нем вы не будете непреднамеренно включать их...

    string filters = "*.jpg;*.png;*.gif";
    string Path = ConfigurationManager.AppSettings["FilePath"].ToString();

    List<String> images = new List<string>();

    foreach (string filter in filters.Split(';'))
    {
        FileInfo[] fit = new DirectoryInfo(this.Server.MapPath(Path)).GetFiles(filter);
        foreach (FileInfo fi in fit)
        {
            images.Add(String.Format(Path + "/{0}", fi));                 
        }
    }

    RepeaterImages.DataSource = images;
    RepeaterImages.DataBind();