在网页上,是否可以在将文件上传到服务器之前将大文件拆分成块?例如,将10MB文件拆分为1MB块,并在显示进度条的同时一次上传一个块?
听起来JavaScript没有任何文件操作功能,但是Flash和Java applet呢?
这需要在IE6 +,Firefox和Chrome中运行。 更新:忘了提及(a)我们使用的是Grails,(b)这需要在https上运行。
答案 0 :(得分:3)
您可以尝试Plupload。它可以配置为检查用户端可用的任何运行时,无论是Flash,Silverlight,HTML5,Gears等,并使用首先满足所需功能。除此之外,它还支持图像大小调整(在用户端,保留EXIF数据(!)),流和分段上传以及分块。文件可以在用户端进行分块,并逐块发送到服务器端处理程序(需要在服务器上进行一些额外的处理),这样大文件就可以上传到服务器上,文件大小限制设置为更低的值然后他们的大小,例如。还有更多。
有些运行时支持https我相信,有些需要测试。无论如何,这些天的开发人员都非常敏感。所以你至少可以试试;)
答案 1 :(得分:2)
我知道的唯一选择是允许这是一个签名的Java小程序。
未签名的小程序和Flash影片没有文件系统访问权限,因此无法读取文件数据。 Flash能够上传文件,但大部分都是由内置的Flash实现处理的,而且我记得文件内容永远不会暴露给您的代码。
答案 2 :(得分:1)
此选择的浏览器没有JavaScript解决方案。有File API虽然它适用于较新的Firefox和Chrome版本,但它不会在IE中发生(IE9中也没有任何迹象)。
在任何情况下,在本地读取文件并通过XMLHttpRequest上传文件都是低效的,因为XMLHttpRequest无法发送纯二进制文件,只能发送Unicode文本。您可以使用base-64将二进制文件编码为文本(或者,如果您真的是专用的,则使用您自己的自定义7位编码),但这比普通文件上传效率低。
你当然可以使用Flash进行上传(参见SWFUpload等),如果必须,还可以使用Java(Jumploader ......我不会打扰这些天,因为Flash流行非常高,Java插件继续下降)。您不一定会将低级别控件拆分为块,但您真的需要它吗?为什么?
另一种可能的方法是使用标准HTML文件上载字段,当提交发生时,设置间隔调用以使用XMLHttpRequest轮询服务器,询问文件上载的进度。这需要在服务器端进行一些工作以将当前上载进度存储在会话或数据库中,因此另一个请求可以读取它。它还意味着使用一个表单解析库,它为您提供进度回调,大多数标准语言都是PHP内置的回调函数。
无论你做什么,采取'渐进增强'的方法,允许没有支持的浏览器回退到纯HTML上传。浏览器通常会有一个用于上传HTML文件的上传进度条,它往往很小,很容易错过。
答案 3 :(得分:0)
你是否特别需要两个在X块?或者您是否尝试通过上传大文件来解决问题? (例如,无法在客户端重新启动上载,当整个文件上传并一次保存在内存中时服务器端崩溃)
搜索流式上传组件。这取决于您正在使用哪种技术,您更喜欢使用哪种组件jsp,asp.net等。
http://krystalware.com/Products/SlickUpload/这是服务器端产品 以下是各种上传者http://weblogs.asp.net/jgalloway/archive/2008/01/08/large-file-uploads-in-asp-net.aspx
的更多内容 有些人尝试管理服务器上的内存,例如。所以整个巨大的文件一次不在内存中,有些人试图管理客户端体验。