DropZone:如何接受 .csv 文件?

Posted

技术标签:

【中文标题】DropZone:如何接受 .csv 文件?【英文标题】:DropZone: How to Accept .csv Files? 【发布时间】:2020-06-05 09:42:01 【问题描述】:

我已经阅读了很多关于 SO 的答案,大多数人建议使用 acceptedFiles 属性来指定接受的 mime 类型。

但是,the DropZone docs say:

Mime 类型确定跨平台不可靠。 CSV 文件, 例如,在 macOS 下报告为 text/plain,但报告为 Windows下的application/vnd.ms-excel。在某些情况下可能没有 完全是一个 mime 类型。

我正在尝试上传一个 .csv 文件,并且(使用 material-ui-dropzone),到目前为止我已经尝试过:

  <Dropzone
    acceptedFiles=['.csv', 'text/*']
    showPreviews=true
    showFileNamesInPreview=true
  />

  <Dropzone
    acceptedFiles='.csv', 'text/*'
    showPreviews=true
    showFileNamesInPreview=true
  />

  <Dropzone
    acceptedFiles='.csv', 'text/csv'
    showPreviews=true
    showFileNamesInPreview=true
  />

...等等,但到目前为止都没有工作:

打开文件对话框将.csv 文件显示为灰色 将 .csv 文件拖放到 DropZone 会收到“文件 SeriesNotes.csv 被拒绝。不支持文件类型”。留言

material-ui-dropzone(或任何版本的 DropZone)解决此问题的正确方法是什么?

【问题讨论】:

【参考方案1】:

经过多次反复试验,这对我有用。

acceptedFiles=[".csv, text/csv, application/vnd.ms-excel, application/csv, text/x-csv, application/x-csv, text/comma-separated-values, text/x-comma-separated-values"]

windows 上的主要文件是 .csv,其余的以防万一。

【讨论】:

这很好用,注意到最好添加 1 元素数组,就像使用的这个答案一样,而不是在每个数组元素中以不同的方式分隔它们 accept: "text/plain, application/vnd.ms-excel" --> 这对我来说适用于 csv 和文本文件,但它也接受 .xls 文件,这是我试图避免的.有什么建议?编辑:据我所知,application/vnd.ms-excel 是 .csv 和 .xls 文件的接受标准。其他参数并没有真正做任何事情。您能否在最后验证这是否也是如此?我遇到了排除问题 :如果我删除了 acceptapplication/vnd.ms-excel,它会正确排除 .xls 和 .xlsx 文件,并且只接受 .csv 文件。但是,在 onHover 上,它显示为不可接受的文件类型。对不起,如果我让你感到困惑。将找到解决方案并在此处更新 谢谢@user1767752,这对我来说很好!

以上是关于DropZone:如何接受 .csv 文件?的主要内容,如果未能解决你的问题,请参考以下文章

Dropzone 在对话框中仅显示 CSV 和 XLS 文件

使用 React-dropzone 拖放空文件夹

CSS 指针事件 – 接受拖动,拒绝点击

使用 React DropZone 将 CSV 转换为 JSON 客户端

如何允许表单在不处理 Windows 消息的情况下接受文件删除?

DropzoneJS & Laravel - 输出表单验证错误