读取指定文件夹下的所有图片之相对路径

  DirectoryInfo di = new DirectoryInfo(Server.MapPath("LOGO"));//找到图片所在的路径
            FileInfo[] fiArray = di.GetFiles();      //读取该路径下所有文件           
            foreach (FileInfo fi in fiArray)
            {
                string fileType = fi.Name.Substring(fi.Name.LastIndexOf(".") + 1);//取后缀名
                if (fileType == "bmp")//是bmp则添加。
                {
                    ImageButton img = new ImageButton();
                    //Image img = new Image();
                    img.ID = fi.Name.Substring(0, 3);
                    img.ImageUrl = @"/SafeGuard/LOGO/" + fi.Name;//filepath+"/"+fi.Name;
                    img.Click += new ImageClickEventHandler(img_Click);                   
                    e.Item.Controls.Add(img);
                }
            }     

上面的代码是没有问题的。
对于相对路径和物理路径的问题我绕了一大圈。
刚开始的时候我直接用的是   DirectoryInfo di = new DirectoryInfo("LOGO");本地测是可以的,原因是它直接找到的还是应用程序所有的物理路径,所以在发布后放到服务器上得到的是“未能找到路径“C:/WINDOWS/system32/LOGO”的一部分。”找不到相应的物理路径E:/WORK/SAFEGUARD/LOGO/000。BMP但是,为什么会这么提示我倒不明白了。我IIS的默认路径设置的是F:COMMON/SITEWEB而它怎么指向了C盘下?
后来我想通过完全指向虚拟路径的方法来实现。用到了。
string path = Request.ApplicationPath;//得到虚拟目录
string filepath = Server.MapPath(path+@"/LOGO");//得到web服务器上的物理路径
DirectoryInfo di = new DirectoryInfo(filepath );
显示的是以FILE:///的形式出现的。自然在服务器上也找不到。为什么?
后来直接改为在读目录时来查找server.mappath来找。此时找到了。
MSDN上对它的解释是返回与 Web 服务器上的指定虚拟路径相对应的物理文件路径。
虽然最终解决了这个显示的问题,但是还是有很多地方不明白。
看来要下功夫的地方还有很多,也请各位路过的指点迷津! 

 

 

参照:

ASP.NET2.0 遍历文件夹下所有图片

作者:清清月儿

主页:http://blog.csdn.net/21aspnet/           时间:2007.4.4


1.以下目录有若干图片(都是大图片)

2.在页面展现效果图

3.代码

后台代码
using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Runtime.Remoting;
using System.Runtime.Remoting.Lifetime;
using System.IO;

public partial class _Default : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        DirectoryInfo imagesfile = new DirectoryInfo(Server.MapPath("./images"));
        DataList1.DataSource = imagesfile.GetFiles("*.jpg");
        DataList1.DataBind();
       

    }
   
}

前台代码:
<%@ Page Language="C#" AutoEventWireup="true"  CodeFile="Default.aspx.cs" Inherits="_Default" %>

<!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>遍历文件夹下所有图片 http://blog.csdn.net/21aspnet 清清月儿</title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        &nbsp;<asp:DataList ID="DataList1" runat="server" RepeatColumns="3">
            <ItemTemplate>
                <asp:image ID="Image1" runat="server" width="120" ImageUrl='<%#"images/" +Eval("Name")%>'/>
            </ItemTemplate>
        </asp:DataList></div>
    </form>
</body>
</html>

说明:如果大家想生成真正的缩略图就要在另个页面生成
ImageUrl='<%#"AAA.aspx 取得生成的结果即可。可参考以下代码:

 

Example: SimpleImageHandler.ashx
<%@ WebHandler Language="C#" Class="SimpleImageHandler" %>

using System;
using System.Drawing;
using System.Drawing.Imaging;
using System.IO;
using System.Web;
using System.Web.Caching;

public class SimpleImageHandler : IHttpHandler {

    public void ProcessRequest(HttpContext context)
    {
        // Load image.
        Bitmap bmap = new Bitmap(@"C:/Temp/TEST.JPG");

        // You could do something here, e.g. add some texts to image.
        
        // Send back image.
        context.Response.ContentType = "image/jpeg";
        context.Response.BufferOutput = false;
        bmap.Save(context.Response.OutputStream, ImageFormat.Jpeg);
    }

    public bool IsReusable
    {
        get
        {
            return false;
        }
    }

}


发布了106 篇原创文章 · 获赞 38 · 访问量 57万+
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 大白 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览