建议在上传时检查文件大小的方法
我正在开发一个支持文件上传的Web应用程序。 我已经熟悉检查服务器端的大小,但我想检查客户端的文件大小。
我知道它的浏览器限制,出于安全原因我们无法访问文件属性。 所以我尝试了swfupload和uploadify组件。 两者都很好,满足需求。
但限制是取决于闪存,所以如果我的最终用户没有安装闪存,那么我最终会遇到问题。 要求他们安装闪存是另一回事,但它的门户网站和用户群非常庞大。 所以我不喜欢让他们安装flash的想法。
今天我遇到了gmail中的文件上传function。 并且在没有安装闪存的情况下在浏览器(IE)中进行了测试 我发现的很有趣。 如果您上传了一个大文件,他们会进行回发并立即返回文件大小过大的消息。
如何实现,如何在不下载整个内容的情况下找到文件的大小。 我相信这必须通过阅读HTTP标头信息来完成。 我对吗?
所以这就是我想要实现的确切function。 如果已经安装了闪存,我可以使用uploadify来检查大小,否则可能会实现谷歌使用的从未听过的技术。
谁能推荐我怎么做?
以前任何人都遇到过类似的问题,你做了什么?
更新:
使用FF安装的Flash上传Gmail
IE中没有flash
您可以查看File API ,它是HTML 5的草稿。这是一篇很好的文章 。 如果浏览器支持Gmail,那就是Gmail使用的。 但是没有办法确保它适用于所有浏览器。
在IE中,您可以使用JS和ActiveX来完成 :
function A() { var oas = new ActiveXObject("Scripting.FileSystemObject"); var d = document.abvalue; var e = oas.getFile(d); var f = e.size; alert(f + " bytes"); }
几天前我实际上问了这个问题(或多或少),一般的答案似乎是:它无法完成。
供参考: 在上传之前,确保上传文件的文件大小低于maxRequestLength?
我没有对此进行过测试,但请求中是否没有“Content-Length”标题? 它不仅包括上传的文件,还可以将其用作基准来确定POST是否太大而无法处理。
我首先要说的是,我无法生成一份工作副本,而且大部分内容都是我通过阅读和轻微的解释来理解的。 也就是说,如果我错了,也许你可以多探索一下和/或让我直截了当。 主要指向经典表单的概念,其中隐藏的输入名为MAX_FILE_SIZE …在PHP / Apache中,如果上载大于MAX_FILE_SIZE,服务器将停止(请参阅此处的上一篇文章)。 在PHP方面,$ _FILES数组将返回一个错误代码(可以在这里看到)。 注意UPLOAD_ERR_FORM_SIZE 。
要把这些放在一起,你可以让JavaScript在IFrame中上传文件并获得结果。 如果服务器发出错误消息(在理论上,这将非常快),JavaScript可以简单地提醒用户。 否则,我们可以假设该文件现已成功上传。 现在试图理解谷歌的代码几乎是不可能的; 一个快速的HTML扫描是我去的,它没有任何帮助…他们确实有隐藏的输入字段,但没有MAX_FILE_SIZE作为名称。 它们更短,大多数似乎没有价值。 但是,我相信这是可能的。 想什么?
谁知道,也许伟大的Google Web Server内置了能够立即切断上传的function。 谢谢收听!
我相信文件上传基于RFC 1867 ,尽管HTML5取代了所有这些。 您可以完美地重新实现此RFC,服务器端,并检查累积的传入流的大小。
在大多数情况下,我认为您不能安全地依赖内容长度,因为它可能不代表文件的大小,而只是大小的大小。
经过大量搜索,我发现我们可以使用maxAllowedContentLength来限制ASP.Net应用程序中的上传大小。 请记住,此设置仅适用于IIS 7或更高版本。
由于这是在IIS级别处理的,因此我们不需要处理服务器代码中的任何内容。 如果大小限制超出,它将返回错误代码404.13 。 因此,您可以轻松检查客户端的代码以确定问题。
如果客户端计算机上没有安装闪存,这就是我处理大文件的方法。
希望这可以帮助某人。
有关此设置的更多信息,请阅读此内容
即使在上传文件完全传输之前,也可以确定上载文件的大小。 即使使用Internet Explorer也是如此。 通过使用HTTP的内容长度标头!
在java世界中:
首先,如果您处理在第一个servlet /filter/控制器中的任何先前线程质量之前到达服务器的请求,您将获得内容长度标头中的总文件大小(请求。 getContentLength())。
第二步 – 看看ajax实现,certificate它是可能的: http : //www.ajaxfilebrowser.com/
您可以使用以下代码来获取Gmailfunction:
希望这有帮助。
大声笑你可以做到这一点,这只是一点点辛苦,如果你搜索“uploadbar flash”而不是使用你检索的数据来创建一个上传者你可以用它来传递或比较或做任何你想要的我发现这个看起来相当不错,它不会使用闪存,但你可以用它来实现相同的东西http://www.plupload.com高度可配置ps你可以强制它只是使用闪存,如果你真的喜欢