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

HTML Input="file" Accept Attribute File Type (CSV)

提问人:Dom 提问时间:8/7/2012 最后编辑:CommunityDom 更新时间:11/13/2022 访问量:843653

问:

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

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

在我的桌面上使用以下 Excel 文件:

  1. 文件1.xlsx
  2. 文件1.xls
  3. 文件:.csv

我希望文件上传显示 , , 和 files。.xlsx.xls.csv

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

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

accept= 应用程序/vnd.ms-excel (.XLS)

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

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

html csv 文件上传 输入 内容类型

评论

0赞 tletnes 8/7/2012
大多数浏览器不尊重 accept 属性,因为它可用于促使不注意传输敏感文件的用户。
11赞 Dom 2/21/2013
@tletnes不正确,大多数主要浏览器都支持它
0赞 Nithin Paul 2/24/2014
如果 ($.trim($('#OriginalFileName').val()) != “”) { var ext = $('#OriginalFileName').val().split('.'),您也可以尝试此操作。pop().toLowerCase();if ($.inArray(ext, ['doc', 'docx', 'pdf', 'xlsx', 'xls']) == -1) { $('#OriginalFileNameValid').html('使用 .doc,.docx,.pdf 个文件');
1赞 mltsy 1/22/2019
如果任何其他 Ubuntu 用户对此感到困惑,我发现在 Ubuntu 中,Firefox 默认显示“所有文件”,但将您的“accept”属性添加到文件选择对话框的文件类型下拉列表中。

答:

42赞 yogi 8/7/2012 #1

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);" />

我想它会对你有所帮助,当然你可以根据需要更改这个脚本。

评论

6赞 Christophe Roussy 2/4/2014
很酷的解决方法,但我不明白为什么这样的属性被认为是“旧的”。这是几乎每个操作系统上的基本文件选择器功能,浏览器应该尽最大努力使其正常工作,这将帮助许多用户......
4赞 thomaux 9/14/2016
accept 属性并不旧,除 IE/Edge 外,其他主要浏览器都支持该属性:caniuse.com/#feat=input-file-accept。请改写您的答案,因为它具有误导性。
3赞 Coderer 6/27/2017
该属性最重要的方面是它为打开文件对话框提供的提示。默认情况下,应该向用户显示匹配的文件,如果他们愿意,可以选择其他类型——这就是现在大多数现代浏览器的行为方式。accept
0赞 eddy 9/11/2020
sender.value 不再有效。它应该是 sender.target.value
1860赞 Dom 8/7/2012 #2

好吧,这很尴尬......我找到了我一直在寻找的解决方案,它再简单不过了。我使用以下代码来获得所需的结果。

<label for="fileSelect">Spreadsheet</label>
<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 文件 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" />

原因如下:

这些类型通常表示打开文件的位置。 例如,Abode Reader。 但是,当上传此文件时,浏览器并不关心打开并询问该应用程序。但是,扩展名或键入的单词(如 MIME 或 etcetera )可直接应用于文件单元。application image audio

可以将它们用于 DOM 实例。 因此,您应该使用扩展格式名称。 在许多设备上,如手机,当您单击选择文件时,可以看到用户菜单中未接受的文件以灰色排除在外。 祝您度过愉快的时光!File

评论

3赞 Salvatorelab 10/22/2013
Chrome似乎支持这个属性,但Firefox仍在努力。您可以对此错误进行投票,以便他们更快地解决它:bugzilla.mozilla.org/show_bug.cgi?id=826176
3赞 Dom 1/12/2014
@DavidRouten accept 属性只会过滤文件类型。您还必须使用文件验证来防止用户选择其他文件类型。希望对您有所帮助!
1赞 Ganesa Vijayakumar 9/5/2014
<input type=“file” accept=“.csv” /> 在 Firefox 中不起作用。有没有其他解决方案可以在Firefox中工作。
4赞 tmas 2/15/2016
<input type="file" accept=".csv, text/csv" />在 Mac 上为 Firefox、Chrome 和 Opera 工作。只有 .csv 在所有浏览器中都不起作用。
1赞 srinivas 7/13/2018
对于上面提到的 xls 和 xlsx mime 类型,请确保您安装了正确的播放器应用程序(如 Microsoft excel 或 word 等)。
17赞 eduardomozart 3/6/2013 #3

我在 accept 属性中使用了 CSV mime 类型,它在 Opera 中工作正常。尝试过没有运气。text/comma-separated-valuestext/csv

其他一些 CSV 的 MIME 类型(如果建议不起作用):

  • text/逗号分隔值
  • 文本/csv
  • 应用程序/csv
  • 应用程序/Excel
  • 应用程序/vnd.ms-excel
  • 应用程序/vnd.msexcel
  • 文本/任意文本

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

评论

2赞 eduardomozart 3/7/2013
嗨,多姆!我想说对不起,因为您的答案(标记为正确)是可以的,而且我以前没有太多关注,因为我只在 Opera 中测试该网站。在其他浏览器中测试后,我看到您的答案更完整。但它不适用于所有浏览器。Firefox 17 不支持在文件对话框 (bugzilla.mozilla.org/show_bug.cgi?id=83749#c14) 中接受 attr 如何筛选,所以这个属性对我来说是悬念。无论如何,我都会使用 javascript 文件验证,但在 accept attr 中使用 text/csv,因为它是 IANA iana.org/assignments/media-types 的默认值
-2赞 iiic 11/6/2013 #4

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

评论

14赞 Dom 11/6/2013
根据 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.
3赞 RenatoIvancic 8/11/2014 #5

我修改了@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 属性。"All files ('*')"

5赞 Olga Lisovskaya 9/19/2014 #6

只需执行以下操作,即可知道任何文件的正确内容类型:

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);
}

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

评论

0赞 Haprog 3/19/2021
这样做并选择我得到但在输入上使用的 .csv 文件并不能正确过滤文件(在 Brave / Chromium 上测试)。不过使用有效。为了安全起见,如果您不想在所有常见的浏览器中进行测试,我会同时使用 mime 类型和文件扩展名,如下所示。type: "text/csv"accept="text/csv"accept=".csv"accept="text/csv,.csv"
15赞 trojan 4/4/2017 #7

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

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

我不得不写这个:

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

评论

0赞 gustav 7/29/2017
嗨,,,它在我的野生动物园上也很好用。但是,如果我们想接受 excel 文档怎么办?你有什么线索吗?@trojan
1赞 Sk. Irfan 11/6/2019
检查大钱的答案。顶级域名;<input type=“file” ID=“fileSelect” accept=“.xlsx, .xls, .csv”/>
258赞 Big Money 9/20/2017 #8

这些天你可以只使用文件扩展名

<input type="file" ID="fileSelect" accept=".xlsx, .xls, .csv"/>

评论

3赞 SharpC 1/30/2019
尽管令人惊讶的是,这(和替代方案)似乎仍然不适用于 Edge 41.16299.820.0 stackoverflow.com/questions/31875617/...... wpdev.uservoice.com/forums/257854-microsoft-edge-developer/......application/vnd.openxmlformats-officedocument.spreadsheetml.sheet,application/vnd.ms-excel
6赞 Ihor 9/30/2020 #9

例如,除了最佳答案之外,CSV 文件在 macOS 下报告为 text/plain,但在 Windows 下报告为 application/vnd.ms-excel。 所以我用这个:

<input type="file" accept="text/plain, .csv, application/vnd.openxmlformats-officedocument.spreadsheetml.sheet, application/vnd.ms-excel" />
5赞 Lancer.Yan 11/20/2020 #10

经过我的测试,在【macOS 10.15.7 Catalina】上,【Dom / Rikin Patel】的答案无法正常识别[.xlsx]文件。

我个人总结了大部分现有答案的实践,并通过了个人测试。总结以下答案:

accept=".csv, .xls, .xlsx, text/csv, application/csv,
text/comma-separated-values, application/csv, application/excel,
application/vnd.msexcel, text/anytext, application/vnd. ms-excel,
application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"
2赞 Nazmul Haque 6/28/2022 #11

您可以使用以下接受类型

<input id="upload_file" accept="image/png,image/jpg,image/jpeg,.doc, .docx,.xls,.xlsx,.pdf,.csv," name="upload_file" type="file"/>

评论

1赞 BoundForGlory 9/6/2023
这是我的答案。简单明了,有一个工作的例子。谢谢
6赞 Mohammed ziou 8/23/2022 #12

只需在 out 中的操作 atr 中写下要接受的扩展名,逗号分隔即可

<input type="file" accept=".any, .ext, .you, .want">