在 .NET 中上传大文件

Posted

技术标签:

【中文标题】在 .NET 中上传大文件【英文标题】:Upload large files in .NET 【发布时间】:2010-09-22 01:22:00 【问题描述】:

我做了很多研究,找到了一个 .NET 的上传组件,我可以用它来上传大文件,有一个进度条,并且可以恢复大文件的上传。我遇到过一些组件,例如AjaxUploader、SlickUpload 和PowUpload,仅举几例。这些选项中的每一个都需要花钱,并且只有 PowUpload 进行可恢复上传,但它使用 java 小程序来完成。我愿意花钱买一个能做好这些事情的组件,但如果我能自己写那就最好了。

我有两个问题:

    是否可以在不使用 flash/java/Silverlight 的情况下在客户端恢复文件上传? 是否有人提供一些代码或文章链接来解释如何编写允许流式上传和 ajax 进度条的 .NET HTTPHandler?

谢谢你, 奥斯汀

[编辑]

我意识到我确实需要能够为我的项目进行可恢复的文件上传,对于可以做到这一点的组件有什么建议吗?

【问题讨论】:

【参考方案1】:

这对您的项目来说可能为时已晚,但 POW Upload 现在已经在他们的新版本中实现了自动上传简历。我们即将在我们的网站上实施它。

【讨论】:

【参考方案2】:

SlickUpload 非常可靠,很多大公司都在使用它,正如 the site 所说的那样。

【讨论】:

【参考方案3】:

没有更多关于简历问题的补充。 我使用(并继续使用)telerik radUpload,我对它非常满意 (它甚至可以用于中等信任模式,这对我来说非常重要)。我遇到的唯一问题(并且无法解决)是上传大于 2GB 的文件...

【讨论】:

是指 2MB 而不是 2GB?如果是这样,那么这是由于在 web.config 中设置了 maxrequestlength【参考方案4】:

1) 是否可以在不使用 flash/java/Silverlight 的情况下在客户端恢复文件上传?

没有。实际的 HTTP 协议本身不支持恢复部分上传,因此即使您确实使用了 flash 或 silverlight,您仍然需要在服务器上使用其他东西,例如 FTP。 过去,我通过用 C# 编写自定义客户端应用程序“解决”了这个问题,该应用程序将文件分解成小块 (2meg),分别传输它们,然后服务器将它们组合在一起。

2) 有没有人有一些代码或文章的链接来解释如何编写允许流式上传和 ajax 进度条的 .NET HTTPHandler?

虽然这并不能解决“恢复”问题,但我在客户端使用了SWFUpload,效果非常好。它提供了一个智能文件浏览器(您可以在其中仅提示用户输入 jpeg 文件等)和上传进度跟踪,所有这些都无需修改您的服务器。

【讨论】:

您可以创建一个与您的 C# 应用程序执行相同操作的 silverlight 客户端,对吧?用户选择上传后,将其分解,然后分别提交那些部分?所以从技术上讲,在 Silverilight 中是可能的,对吧? 当然可以。困难的部分不是客户端本身,而是与服务器协商以了解之前上传了多少 2-meg 块,并跟踪所有这些内容 另一种选择(也不能解决恢复问题)是 Darren Johnson 的用于 IIS 的 ASP.NET 上传模块。这将使用进度条进行上传,无需 Flash、Java 或 Silverlight:darrenjohnstone.net/2008/07/15/… Darren 的站点好像挂了,但是你仍然可以浏览根目录的文件结构。 FileUpload 控件似乎有下载包。【参考方案5】:

无法使用标准 html 文件输入控件恢复上传,因为整个文件都是通过 HTTP 请求提交的。

我过去使用过NeatUpload,它会为您提供一个进度条。它采用 LGPL 许可,因此您无需付费,而且它是开源的。

【讨论】:

以上是关于在 .NET 中上传大文件的主要内容,如果未能解决你的问题,请参考以下文章

asp.net(c#)如何上传大文件?

在 ASP.NET 中流式传输大文件上传

我们可以在 .net core 3.1 中一次性上传多少大文件到 Azure 文件共享

如何在 ASP.Net MVC 4 中上传大文件

在 ASP.NET Core 3.1 中上传和下载大文件?

在 ASP.NET Core 1.0 上处理大文件上传