首页 > 解决方案 > 确保上传的文件是 grails 中的 csv 文件的正确方法?

问题描述

有一个文件输入用于上传 csv 文件。

这是多部分文件类的文档。

https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/web/multipart/commons/CommonsMultipartFile.html

现在我想确保上传的文件是 csv 文件。换句话说,该应用程序只接受 csv 文件。commonsmultipartfile 类提供了两种方法。一是内容类型。对于 csv 文件,它返回 application/octet-stream。另一种方法是 originalFilename,它给出带有扩展名的文件名。

在此处输入图像描述

在此处输入图像描述

所以我想知道确保上传文件是 csv 文件的最佳方法是什么。我怀疑检查内容类型是不够的,因为 application/octet-stream 是二进制文件的 mime 类型。因此,您是否建议同时使用 contenttype 和 originalfilename 来提取扩展名。我感谢任何指南。谢谢!我正在使用 grails 2.2。

标签: csvgrailsgrails-2.2

解决方案


您可以使用 accept 属性阻止上传具有 .csv 扩展名的文件以外的任何内容,例如

<input class="form-control" required="required" type="file" name="csvfile" id="csvfile" accept=".csv" />

这并不能阻止某人更改例如 xslx 文件的扩展名并尝试上传,但是,我倾向于在流式传输文件时解析一两行,如果它与我期望的模式不匹配则拒绝它。当然,这对于您的解决方案可能不实用。


推荐阅读