我正在将图像上传到文件夹,我希望每次将新图像保存在文件夹中时都会在网页上显示。
我可以显示已经在文件夹中的初始图像,我还可以检测新图像何时保存到文件夹中,但我不知道如何显示新图像。
我是网络开发的新手。有人可以帮帮我吗?
以下是代码:
public partial class _Default : System.Web.UI.Page
{
string DirectoryPath = "C:\\Users\\Desktop\\PhotoUpload\\Uploads\\";
protected void Page_Load(object sender, EventArgs e)
{
FileSystemWatcher watcher = new FileSystemWatcher();
try
{
watcher.Path = DirectoryPath;
watcher.Created += new FileSystemEventHandler(watcher_Created);
watcher.EnableRaisingEvents = true;
Image image = Image.FromFile(DirectoryPath + "inicial.jpg");
MemoryStream ms = new MemoryStream();
image.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg);
byte[] im = ms.ToArray();
Context.Response.ContentType = "Image/JPG";
Context.Response.BinaryWrite(im);
}
catch (Exception ex)
{
}
}
void watcher_Created(object sender, FileSystemEventArgs e)
{
Console.WriteLine("File Created: Name: " + e.Name);
try
{
//How to display new image?
}
catch (Exception ex)
{
}
}
}
答案 0 :(得分:0)
我认为你在ASP.NET开发方面缺少一个重要的观点。您要做的是在页面内的服务器端使用FileWatcher。
ASP.NET工作的方式是它通过其管道运行来处理请求,当它完成时(已经将输出(html)准备好发送到浏览器)它会破坏在请求中创建的所有实例(包括你的页面和包含的FileWatcher)。
如果你想在浏览器中更新页面,你将被迫使用一些客户端脚本(非常推荐jQuery)来实现轮询,该轮询将请求(最好是ajax)发送回服务器,要求新添加的图像。 / p>
我希望能帮到你吗?
迈克尔
答案 1 :(得分:0)
正如Michael指出的那样,您在问题中提出的部分解决方案并不适合Web应用程序。
这里要记住的是在请求页面时在服务器上运行的代码与在客户端浏览器中运行的代码之间的区别。
为了拥有自动更新的网页,您需要某种客户端机制来轮询服务器并检查新图像。这可能是某种定期AJAX请求的形式。原型js框架通过Ajax.PeriodicalUpdater提供此功能。