在Javascript中上传具有大小限制的多个文件

时间:2010-03-29 11:56:40

标签: javascript python

有人可以告诉我如何在javascript中上传多个大小限制的文件。

3 个答案:

答案 0 :(得分:4)

你做不到。

您需要使用替代方案,例如基于Flash的上传器,如SWFUpload

答案 1 :(得分:2)

您可以通过多个<input type="file">元素执行多个文件。 HTML5(至少)还为单个<input type="file">元素提供multiple属性,Chrome和Firefox至少支持该属性(但不支持IE)。

您无法在浏览器中使用JavaScript进行文件大小限制(尚未,Firefox 3.6除外;请参见下文),因为您无法访问文件系统,所以不知道如何大文件在提交表单之前。您所能做的就是(服务器端)限制允许的请求的大小,并且(如果您将该限制设置为大于您想要允许的单个文件大小),则丢弃任何大于限制的文件。 (不理想。)作为Pekka said,您可以使用替代方案,但当然它们可能有自己的问题(例如Linux上的Flash支持)。

那么“尚未”是什么意思? HTML5人员提供了一个新的DOM API:File API。它完全按照它的说法进行操作,允许JavaScript访问用户通过<input type="file">元素专门授予访问权限的所选文件。到目前为止,我认为只有Firefox 3.6+支持它(这是W3C采用的Mozilla计划),但有人谈到Chrome将在2010年第二季度支持它(所以,现在任何时候),我无法想象Safari和Opera远远落后(如果他们不在那里)。看看微软是否可以加入HTML5并开始重新回归他们曾经在Web技术方面的前沿地位,这将会很有趣。 (“嗯?微软领先的网络技术?”我听到你问。是的 - 这些人曾经为你带来了最快,最少的Windows浏览器。这些是人谁发明了 Ajax。很容易忘记它。他们完全迷失了好几年 - 并且失去了曾经拥有的所有信誉 - 但是有一段时间...... 。)

答案 2 :(得分:1)

您随时可以根据需要filter删除那些大小超出限制的文件。 例如,我在这里过滤小于5mb的文件,filterFiles变量仅包含小于5mb的文件:

var filteredFiles = fileList.filter(function(file){
   return file.size <= 5000000; //5mb
});

ES6方法如下:

const filteredFiles = fileList.filter((file) => (file.size <= 5000000));