HTML Input =“ file”接受属性文件类型(CSV)


501

我的页面上有一个文件上传对象:

<input type="file" ID="fileSelect" />

在我的桌面上包含以下excel文件:

  1. file1.xlsx
  2. file1.xls
  3. file.csv

我要上传文件到ONLY显示.xlsx.xls,和.csv文件。

使用accept属性,我发现这些内容类型负责.xlsx.xls扩展...

accept= application / vnd.openxmlformats-officedocument.spreadsheetml.sheet(.XLSX)

accept= application / vnd.ms-excel(.XLS)

但是,我找不到Excel CSV文件的正确内容类型!有什么建议么?

示例:http//jsfiddle.net/LzLcZ/


大多数浏览器不接受accept属性,因为它可以用于吸引那些不注意传输敏感文件的用户。
tletnes

9
@tletnes不是正确的,大多数主流浏览器都支持它
Dom

如果($ .trim($('#OriginalFileName')。val())!=“”){var ext = $('#OriginalFileName')。val()。split('。'),您也可以尝试此操作.pop()。toLowerCase(); if($ .inArray(ext,['doc','docx','pdf','xlsx','xls'])== -1){$('#OriginalFileNameValid')。html('使用.doc ,.docx,.pdf文件'); }
尼克·保罗

万一其他Ubuntu用户对此感到困惑,我发现在Firefox中,Firefox默认显示“所有文件”,但是在文件选择对话框的文件类型下拉列表中添加“ accept”属性。
mltsy

Answers:


1246

好吧,这很尴尬。。。我找到了所要的解决方案,而且再简单不过了。我使用以下代码来获得所需的结果。希望这对以后的人有所帮助。感谢大家的帮助。

<input id="fileSelect" type="file" accept=".csv, application/vnd.openxmlformats-officedocument.spreadsheetml.sheet, application/vnd.ms-excel" />  

有效接受类型:

对于CSV文件(.csv),请使用:

<input type="file" accept=".csv" />

对于Excel文件97-2003(.xls),请使用:

<input type="file" accept="application/vnd.ms-excel" />

对于Excel Files 2007+(.xlsx),请使用:

<input type="file" accept="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet" />

对于文本文件(.txt),请使用:

<input type="file" accept="text/plain" />

对于图像文件(.png / .jpg / etc),请使用:

<input type="file" accept="image/*" />

对于HTML文件(.htm,.html),请使用:

<input type="file" accept="text/html" />

对于视频文件(.avi,.mpg,.mpeg,.mp4),请使用:

<input type="file" accept="video/*" />

对于音频文件(.mp3,.wav等),请使用:

<input type="file" accept="audio/*" />

对于PDF文件,请使用:

<input type="file" accept=".pdf" /> 

演示:http :
//jsfiddle.net/dirtyd77/LzLcZ/144/


注意:

如果您试图显示Excel CSV文件(.csv),请不要使用:

  • text/csv
  • application/csv
  • text/comma-separated-values仅适用于Opera)。

如果您尝试显示特定的文件类型(例如a WAVPDF),那么这几乎总是可行的...

 <input type="file" accept=".FILETYPE" />

3
Chrome似乎支持此属性,但Firefox仍在使用它。您可以对此错误进行投票,以便他们更快地解决它:bugzilla.mozilla.org/show_bug.cgi?id=826176
Salvatorelab

3
@DavidRouten accept属性只会过滤文件类型。您还必须使用文件验证,以防止用户选择其他文件类型。希望有帮助!
2014年

1
<input type =“ file” accept =“。csv” />在Firefox中不起作用。在Firefox中,是否还有其他解决方案可以实现?
Ganesa Vijayakumar 2014年

1
<input type="file" accept=".csv, text/csv" />在Mac上使用Firefox,Chrome和Opera为我工作。只有.csv并非在所有浏览器中都适用。
tmas

1
您可以为“ xml”文件添加示例吗?这会有所帮助。提前致谢。
ni8mr


38

据我所知,Dom这个属性非常老,在现代浏览器中不被接受,但是这里是它的替代品,尝试一下

<script type="text/javascript" language="javascript">
function checkfile(sender) {
    var validExts = new Array(".xlsx", ".xls", ".csv");
    var fileExt = sender.value;
    fileExt = fileExt.substring(fileExt.lastIndexOf('.'));
    if (validExts.indexOf(fileExt) < 0) {
      alert("Invalid file selected, valid files are of " +
               validExts.toString() + " types.");
      return false;
    }
    else return true;
}
</script>

<input type="file" id="file" onchange="checkfile(this);" />

我想这当然会帮助您,您可以根据需要更改此脚本。


5
不错的解决方法,但我不明白为什么将这样的属性视为“旧”属性。这是几乎所有操作系统上的基本文件选择器功能,浏览器应尽最大努力使其工作,这将帮助许多用户……
Christophe Roussy 2014年

1
accept属性不是很旧,除了IE / Edge:caniuse.com/#feat=input-file-accept之外,主要的浏览器都支持accept属性。请改写您的答案,因为它有误导性。
thomaux

2
accept属性最重要的方面是它提供给打开文件对话框的提示。默认情况下,应该为用户提供匹配文件,大概是他们愿意的话可以选择其他类型的选项-这就是大多数现代浏览器现在的行为。
编码员

13

我已经text/comma-separated-values在accept属性中使用了CSV mime-type,并且在Opera中工作正常。尝试text/csv没有运气。

如果建议的其他MIME类型为CSV,则为CSV:

  • 文字/逗号分隔值
  • 文字/ csv
  • 应用程序/ csv
  • 应用程序/ excel
  • 应用程序/vnd.ms-excel
  • 应用程序/ vnd.msexcel
  • 文字/任何文字

来源:http//filext.com/file-extension/CSV


1
嗨,唐!我想说对不起,因为您的回答(标记为正确)是可以的,并且我之前对此并没有太多关注,因为我只是在Opera中测试该站点。在其他浏览器中进行测试后,我发现您的回答更加完整。但是,并非所有浏览器都支持。Firefox 17不支持接受属性文件过滤器(bugzilla.mozilla.org/show_bug.cgi?id=83749#c14)中的过滤器,因此该属性对我来说是个悬念。无论如何,我将使用javascript文件验证,但是在accept attr中使用text / csv,因为它是IANA的默认值iana.org/assignments/media-types
jayssponsored

11

在Safari 10下,这对我不起作用:

<input type="file" accept=".csv" />

我不得不这样写:

<input type="file" accept="text/csv" />

嗨,,它也很好地适用于我的野生动物园。但是,如果我们要接受excel文档怎么办?你有什么线索吗?@trojan
gustav '17

检查大钱的答案。TLDR;<input type =“ file” ID =“ fileSelect” accept =“。xlsx,.xls,.csv” />
Sk。Irfan

4

通过执行以下操作,您可以知道任何文件的正确内容类型:

1)选择感兴趣的文件,

2)并在控制台中运行:

console.log($('.file-input')[0].files[0].type);

您还可以为输入设置属性“ multiple”,以一次检查多个文件的内容类型,然后执行下一步:

for (var i = 0; i < $('.file-input')[0].files.length; i++){
    console.log($('.file-input')[0].files[i].type);
}

属性接受对于多个属性有一些问题,在这种情况下无法正常工作。


1

我已经修改了@yogi的解决方案。此外,当文件格式不正确时,我将重置输入元素值。

function checkFile(sender, validExts) {
    var fileExt = sender.value;
    fileExt = fileExt.substring(fileExt.lastIndexOf('.'));
    if (validExts.indexOf(fileExt) < 0 && fileExt != "") {
        alert("Invalid file selected, valid files are of " +
                 validExts.toString() + " types.");
        $(sender).val("");
        return false;
    }
    else return true;
}

我具有自定义验证内置功能,因为无论我是否在输入元素中明确设置了accept属性,用户都可以在打开的文件窗口中选择“所有文件('*')”选项。


0

现在您可以使用新的html5输入验证属性pattern=".+\.(xlsx|xls|csv)"


10
根据MDN的说法,This attribute applies when the value of the type attribute is text, search, tel, url or email; otherwise it is ignored.关于文件输入,他们继续说file: A control that lets the user select a file. Use the accept attribute to define the types of files that the control can select.
Dom
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.