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 WAV或PDF),那么这几乎总是可行的...

 <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.