[英]How to bind a folder of my hard disk on my webpage with datalist?
我想在我的网页上显示驱动器上的所有jpg
文件
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
DirectoryInfo dir = new DirectoryInfo(MapPath("D:\pstRZ"));
FileInfo[] files = dir.GetFiles();
ArrayList listItems = new ArrayList();
foreach (FileInfo info in files)
{
listItems.Add(info);
}
dtlist.DataSource = listItems;
dtlist.DataBind();
}
}
如果需要将图像存储在Web应用程序文件夹之外,则需要以任何方式将图像提供给用户,解决方案之一是使用httphandler。
这是您的布局:
<asp:DataList runat="server" ID="dtlist">
<ItemTemplate>
<img src="GetImage.ashx?fileName=<%#Eval("Name")%>" alt="Image"/>
</ItemTemplate>
</asp:DataList>
是您的代码:
if (!IsPostBack)
{
var dir = new DirectoryInfo("D:\\Images\\");
var files = dir.GetFiles("*.png");
var listItems = new ArrayList();
foreach (FileInfo info in files)
{
listItems.Add(info);
}
dtlist.DataSource = listItems;
dtlist.DataBind();
}
这是http处理程序GetImage.ashx:
public void ProcessRequest(HttpContext context)
{
var root = "D:\\Images";
var fileName = context.Request.Params["fileName"];
if (String.IsNullOrEmpty(fileName)) RenderInvalidRequestMessage(context);
var fullFilePath = root + "\\" + fileName;
//var dir = (new FileInfo(fullFilePath)).Directory;
//if (dir == null || dir.FullName != root) RenderInvalidRequestMessage(context);
if (!File.Exists(fullFilePath)) RenderInvalidRequestMessage(context);
//TODO: Add validation and any security check.
context.Response.ContentType = "image/png";
context.Response.WriteFile(fullFilePath);
}
private void RenderInvalidRequestMessage(HttpContext context)
{
context.Response.ContentType = "text/plain";
context.Response.Write("File not found.");
context.Response.End();
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.