【问题标题】:How to upload only csv files into the server in Java如何仅将 csv 文件上传到 Java 中的服务器
【发布时间】:2012-12-12 09:52:51
【问题描述】:

我有一个需要上传 csv 文件的应用程序。

一切正常。我正在成功上传扩展名为 .csv 的文件。

现在问题来了。有人可能会尝试通过将扩展名更改为.csv 来上传exe 文件并上传到服务器。这是完美的上传。有人建议我使用mimetype 上传文件。我遵循this 教程。

我正在为 csv 文件获取 mimetype null

那么你能帮我如何只上传 csv 文件吗?

提前致谢

【问题讨论】:

    标签: java file-upload csv


    【解决方案1】:

    嗯,你是在正确的轨道上。您需要进行某种文件检查,而不仅仅是信任文件扩展名。

    要么你必须自己编程,要么使用第三方库(这就是你正在做的)。

    如果您继续使用第三方框架,您肯定遇到了配置问题。问题是什么我无法从你的描述中看出,因为我不知道图书馆。

    如果您只对识别 CSV 文件感兴趣,我会推荐一些至少您理解并可以控制的简单方法。比如这种做法:

    假设 CSV 文件由 0..n 行具有相同数量的元素 pr 组成。行,由以下字符之一分隔:, ;

    EXE 文件不太可能具有这种结构,除非有人在了解您的实现的情况下故意攻击您的系统。

    阅读前几行。

    在正则表达式 ([,;]) 上拆分它们。

    检查结果是否具有相同数量的元素。

    为了更加安全,请检查它们是否在同一个字符上分开。

    【讨论】:

      【解决方案2】:

      据我所知,您无法阻止某人将任何文件类型上传到您的服务器,特别是由于您所说的更改扩展名等问题。您唯一的可能是在收到文件后尝试将其解析为 *.csv。如果成功解析它,则将其存储在存储库中并以​​成功消息响应,如果没有,则忽略该文件并以错误消息响应。

      显然您可以parse the csv file client side with Javascript,但您应该始终验证您的文件服务器端。

      Myme 类型仅告诉您的服务器预期的类型,但这不会阻止某人向您发送非 csv 文件。

      【讨论】:

        【解决方案3】:

        即使您设置了 mimetype,我猜这也仅取决于文件扩展名。所以设置.csv 很可能仍然会绕过它。

        如果您发现字符数据以外的任何内容引发错误或忽略文件,我会做的只是读取文件以获取 ASCII 数据。通过数字范围循环和比较,或者您可以将其读取为字符串并使用正则表达式,如[^\\p{ASCII}]

        【讨论】:

          猜你喜欢
          • 2014-01-12
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-06-09
          • 2011-01-16
          • 2017-04-25
          • 2014-11-16
          • 1970-01-01
          相关资源
          最近更新 更多