【问题标题】:File upload / did I make a mistake choosing vb.net instead of php?文件上传/我选择 vb.net 而不是 php 是否犯了错误?
【发布时间】:2013-12-20 09:40:51
【问题描述】:

在过去的 3 天里,我一直在尝试为多个文件创建一个上传系统,这些文件可能很大,带有进度条。

过去几天我一直在无情地漫游网络,我可以说,我现在已经熟悉了大多数困难。

遗憾的是,我在网上找到的所有解决方案都不是用c#或vbscript编写的,实际上大部分都是用php编写的。

我不介意切换到另一种语言,但整个网站都是用 vb.net 编写的,为了保持连贯性,我认为最好还是继续使用它。

文件上传: 问题 1 - 进度条: 我知道文件上传不适用于 ajax,因为 ajax 响应只会在文件完成上传后发生。 我知道有一个使用 iFrames 的解决方案,但我似乎找不到任何在线示例(最好使用 vb.net 或 c#)。 我知道还有另一种使用闪存的替代方法。如何??? 我也理解人们大多反对使用 iframe,但我找不到可能的原因。

问题 2 - 多个文件: 我可以使用 HTML5 支持多个文件。很好,但是 IE 不支持?嗯... IE 用户一次只需要上传一个文件。

问题 3 - 大文件: 如何? 我听说过一些关于分块和 blob 的事情,但这些对我来说仍然只是随机的胡言乱语。有人可以解释一下,含义和实现吗?

非常感谢对阅读材料的引用,尽管如果它在网络上,我可能已经在搜索我的解决方案时阅读过它。

【问题讨论】:

标签: c# asp.net ajax vb.net file-upload


【解决方案1】:

@DevlshOne 有一个不错的帖子,其中包含一些很好的信息。

以下是我所做的三个基本要求:

  • 为客户端访问和上传控制创建 Silverlight 应用程序。 (使用您选择的应用)
  • 创建一个 HttpHandler 以分块接收数据并管理请求。
  • 创建数据库后端来处理文件。

Silverlight 运行良好,因为我已经在使用 VB (ASP.NET)。在浏览器内使用时,与在浏览器外使用不同,ASP.NET 会话与 Silverlight 共享,因此无需额外的安全/登录措施。 Silverlight 还允许我限制可以选择的文件类型,并允许用户从同一个文件夹中选择多个文件。

Silverlight 应用程序抓取用户选择的文件,显示它们以编辑某些属性,然后在用户单击“上传”按钮时开始上传。这引发了许多线程,每个线程将数据块上传到 httphandler。 HttpHandler 和 Silverlight 应用程序以块的形式发送和接收,HttpHandler 在处理上传块的请求时始终发送 OK 或 ERROR 消息。

我们文件上传的具体实现还需要用户填写一些数据库属性(字段),所以我们也有这些属性的输入,并与文件数据一起上传到服务器。

浏览器内的 Silverlight 应用程序也可以通过 html 将参数传递给它,因此我使用“最大块大小”或“最大线程数”等设置来执行此操作。我可以更改数据库中的设置并将其应用于所有用户。

数据库后端基本上是一些控制逻辑流的存储过程(在此处插入您的数据管理首选项)。一个表保存已完成的文件(无文件数据),第二个表保存正在上传的临时文件。一个存储过程在临时表中启动一条新的文件记录并处理额外的块上传,另一个控制完全上传的文件从临时表迁移到完成表。 (HttpHandler中的一段VB代码将实际的二进制文件数据从临时表迁移到物理文件中。)

这看起来很复杂,但最困难的部分是与处理程序的交互和传递块(响应/请求,上传连续的块等)。我遗漏了很多信息,但这是基本的实现。

【讨论】:

  • 很有帮助!我会试一试,如果我有更多问题,我会回复。感谢您的长回答!
  • 好吧...我最终使用了外部api...我只是放弃了。这不值得。
  • 嗯,这取决于您的需求。我的团队总共只用了 2-3 天,但它也是一个小团队,无需与单独的团队打交道(如 DBA 或安全)。你用的是什么 API?
猜你喜欢
  • 2022-10-13
  • 2013-01-01
  • 1970-01-01
  • 2014-11-14
  • 1970-01-01
  • 2016-02-15
  • 2019-05-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多