在ASP.NET中允许文件上载时如何显示预览图像?

时间:2008-11-04 18:45:51

标签: asp.net

这是我想要的功能:

用户从他们的机器中选择一个图像,点击一个上传按钮(或者更好的是以下触发文件输入的onchange事件),并且能够看到他们将要上传的图像的预览。

这是我正在使用的当前工作流程,但似乎不是最理想的:

我有一个图像控件,一个文件输入控件和一个提交按钮控件。单击提交按钮时,代码隐藏处理OnClick事件并从文件输入元素加载图像。然后将其存储在Web服务器上的临时文件夹中,并将图像控件的ImageUrl设置为指向它。

这有效,但导致我在清理这些临时图像时需要做很多清洁工作。这样做是否有更清洁的工作流程?

5 个答案:

答案 0 :(得分:2)

如果你有记忆要燃烧:

  • 将图像字节缓存在内存中
  • 将您的ImageUrl设置为具有某种缓存标识符的图像处理程序(.ashx)
  • 从缓存中提供图像字节
  • 如果用户取消或离开,则丢弃缓存的字节
  • 如果用户接受,则将缓存的字节写入其最终目的地

答案 1 :(得分:0)

您应该上传并重命名图像,以匹配当前记录的某种ID。然后,当您上传新文件时,首先删除所有旧文件,所有这些都在代码隐藏中。

如果您只显示缩略图,则应在保存之前尝试使用图像库调整图像大小。这将节省带宽和存储空间。

答案 2 :(得分:0)

我假设您尝试解决的问题是您的应用程序能够在用户提交到该图像之前预览图像。您当前的方法有许多优点,但如果用户在提交或放弃操作之前预览多个图像,则一个缺点是临时目录中的孤立图像文件。

我注意到一些使用不同方法的流行社交网站。基本上,Java applet用于在用户的本地计算机上执行预览操作。上传到服务器的唯一文件是用户提交的内容。这种方法解决了你遇到的问题;但是,它引入了一个新问题,即要求在本地计算机上安装Java并与Web浏览器集成。

答案 3 :(得分:0)

您可以创建一个小的可执行文件来删除*临时文件夹上的文件,并将其附加到计划任务,以便清理您的临时文件。文件夹偶尔。但我不知道你是否在专用服务器或共享主机托管,因为共享主机,这不起作用

答案 4 :(得分:0)

  

并且能够看到他们即将上传的图片的预览

     

...

     

单击提交按钮时,代码隐藏处理OnClick事件并从文件输入元素加载图像。然后将其存储在Web服务器上的临时文件夹中,并将图像控件的ImageUrl设置为指向它。

想象一下这个对话:

  • 吉姆:我不知道今天是否有能力开车去上班。
  • 鲍勃:你为什么不开车上班?当你付钱的时候,你就会知道你能否负担得起!
  • 吉姆:太棒了!

您只是上传了文件,向他们展示了他们即将上传的文件的预览 ...

如果您的用户通过快速连接上传小图片,有人试图通过慢速连接上传3兆字节JPEG,然后想知道为什么他们的网页被锁定而不选择文件(他们没有',这无疑会正常工作甚至按提交记住,所以你有效地“随机”锁定它们,你可能希望重新评估这个解决方案。

要在上传之前实际显示图像,您需要使用某种flash或silverlight对象(或者可能是java applet),它可以生成本地文件的缩略图。用户的本地磁盘,在它发送到服务器之前。虽然听起来很难看,但如果没有一些客户端插件,就没有办法做到这一点。