如何使用Java将csv文件上传到服务器中

时间:2012-12-12 09:52:52

标签: java file-upload csv

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

一切都很好。我正在使用扩展程序 .csv 成功上传文件。

现在问题就在于此。有人可能会尝试上传 exe 文件,方法是将其扩展名更改为.csv并上传到服务器。它完美上传。有人建议我使用mimetype上传文件。我按照this教程。

我正在为csv文件获取mimetype null

那么请你帮我看看如何只上传csv文件。

先谢谢

3 个答案:

答案 0 :(得分:1)

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

您必须自己编程,或使用第三方库(这是您正在做的)。

如果您继续使用第三方框架,则必须考虑配置问题。问题是我无法从你的描述中看出来,因为我不知道图书馆。

如果您只对识别CSV文件感兴趣,我建议您至少理解并控制一些简单的内容。比如这种做法:

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

EXE文件不太可能具有这种结构,除非有人故意用你的实现知识攻击你的系统。

阅读前几行。

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

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

为了更加安全,请检查它们是否分成相同的字符。

答案 1 :(得分:1)

即使您设置了mimetype,我猜这只是从文件扩展名确定的。所以设置.csv最有可能仍会绕过它。

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

答案 2 :(得分:1)

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

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

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