簡體   English   中英

如何在ASP.NET網站上顯示硬盤驅動器上的文件夾列表?

[英]How do you display a list of images, from a folder on hard drive, on ASP.NET website?

我正在嘗試制作一個簡單的照片庫網站。 使用ASP.NET和C#。 現在我沒有設置服務器,但我只是使用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++;

    }

}

首先,您需要將要顯示的圖像放在Web樹下。 我們假設您已經完成了這些操作,並且它們位於名為Images的文件夾中。 然后,您可以使用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();
}

這基本上創建了一個圖像數組,其中包含目錄中的完整路徑。 然后它創建一個包含圖像虛擬路徑的字符串列表。 然后它將List綁定到轉發器,轉發器顯示其模板中的每個項目,該模板是使用路徑作為ImageUrl的Image控件。 這很快,但是有效,應該是一個很好的起點。

您正在創建一個URL為C:\\Users\\Jordan\\Desktop\\Web Images\\SomeImage.jpg<img>元素C:\\Users\\Jordan\\Desktop\\Web Images\\SomeImage.jpg 顯然,這不適用於Web瀏覽器。

您應該將圖像復制到項目的子文件夾中,並將URL設置為相對URL,如下所示:

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

(假設Web Images文件夾是應用程序根目錄的子文件夾)

例如

您需要有一種方法來指定圖像在應用中的存儲位置。 因此,您需要一個包含其中路徑的Web配置文件。 或者,如果您想要真正有創意,可以將其存儲在數據庫中....

在您的網頁中

    <%@ 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();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM