在过去的3天里,我一直在努力为多个文件创建一个上传系统,可能很大,带有进度条。
过去几天我一直在无情地漫游网络,我可以说,我现在已经熟悉了大部分困难。
遗憾的是,我在网上发现的所有解决方案都不是用c#或vbscript编写的,实际上大多数是用php编写的。我不介意切换到另一种语言,但整个网站都是用vb.net编写的,为了保持连贯性,我认为最好还是继续使用它。
文件上传: 问题1 - 进度条: 我理解文件上传不适用于ajax,因为ajax响应只会在文件完成上传后发生。 我知道有一个使用iFrame的解决方案,但我似乎无法找到任何在线示例(最好使用vb.net或c#)。 我知道还有另一种使用flash的替代方案。怎么样??? 我也理解人们主要反对使用iframe,但我找不到原因。
问题2 - 多个文件: 我可以通过HTML5获得多个文件支持。好极了,但IE不支持吗?好吧...... IE用户只需要一次上传一个文件。
问题3 - 大文件: 怎么样? 我听说过关于分块和blob的东西,但这些对我来说仍然是随机的乱码。有人可以解释,意义和实施吗?
对阅读材料的参考非常受欢迎,即使它在网上,我可能已经在搜索我的解决方案时阅读了它。
答案 0 :(得分:0)
@DevlshOne有一个不错的帖子,有一些很好的信息。
以下是我所做的三个基本要求:
Silverlight运行良好,因为我已经在VB(ASP.NET)中。在浏览器中使用时,与浏览器外相反,ASP.NET会话与Silverlight共享,因此无需额外的安全/登录措施。 Silverlight还允许我限制可以选择的文件类型,并允许用户从同一文件夹中选择多个文件。
Silverlight应用程序抓取用户选择的文件,显示它们以编辑某些属性,然后在用户单击“上传”按钮时开始上传。这会引发许多线程,每个线程都会将数据块上传到httphandler。 HttpHandler和Silverlight应用程序以块的形式发送和接收,HttpHandler在为上载的块处理请求时始终发送OK或ERROR消息。
我们对文件上传的具体实现还需要用户填写一些数据库属性(字段),因此我们还为这些属性提供了输入,并使用文件数据将它们上传到服务器。
浏览器内的Silverlight应用程序也可以通过html传入参数,所以我使用“max chunk size”或“max thread count”等设置来执行此操作。我可以更改数据库中的设置,并将其应用于所有用户。
数据库后端基本上是一些控制逻辑流程的存储过程(在此处插入您的数据管理首选项)。一个表保存已完成的文件(无文件数据),另一个表保存正在上载的临时文件。一个存储过程在临时表中启动新文件记录并处理其他块上传,另一个存储过程控制完全上载文件从临时表到已完成表的迁移。 (HttpHandler中的一段VB代码将临时表中的实际二进制文件数据迁移到物理文件。)
这看起来相当复杂,但最困难的部分是与处理程序的交互并传递块(响应/请求,上传连续的块等)。我遗漏了很多信息,但这是基本的实现。