Java 如何知道多部分请求中部件的实际内容类型

Java 如何知道多部分请求中部件的实际内容类型,java,http-post,mime-types,multipartform-data,multipart,Java,Http Post,Mime Types,Multipartform Data,Multipart,我正在从客户端向服务器发送一个多部分请求,如下所示: FileBody file2 = new FileBody(new File("./test2.txt")); FileBody image1 = new FileBody(new File("./DSC_0064.JPG")); 如您所见,其中一个文件是txt,另一个是JPG图像 在服务器上,我接收到请求并获取每个部分的标题,我得到以下结果: ------------Part 1------------ content-dispositi

我正在从客户端向服务器发送一个多部分请求,如下所示:

FileBody file2 = new FileBody(new File("./test2.txt"));
FileBody image1 = new FileBody(new File("./DSC_0064.JPG"));
如您所见,其中一个文件是txt,另一个是JPG图像

在服务器上,我接收到请求并获取每个部分的标题,我得到以下结果:

------------Part 1------------
content-disposition=form-data; name="test2"; filename="test2.txt"
content-type=application/octet-stream
content-transfer-encoding=binary
------------Part 2------------
content-disposition=form-data; name="image1"; filename="DSC_0064.JPG"
content-type=application/octet-stream
content-transfer-encoding=binary
如您所见,它们的内容类型都是
application/octet-stream
。如何在动态环境中确定实际类型?这是图像吗?文本?录像带


我不能依赖于文件名,因为用户可以将其从txt更改为png,然后我的服务器会认为它是一个图像,但他会因此而出现异常。

这是因为您没有设置MIME类型。您可以选择采用内容类型的其他构造函数:

FileBody file2 = new FileBody(new File("./test2.txt"), ContentType.TEXT_PLAIN);
FileBody image1 = new FileBody(new File("./DSC_0064.JPG"), ContentType.create("image/jpeg"));

其实没有办法找到答案。文件扩展名正是为了这个目的。文件以字节为单位后,可以是文本、压缩数据、图像、歌曲等。您可以做的是捕获错误并忽略该文件。你甚至可以在客户端这样做,这样服务器就不会有太多垃圾让我测试你,然后回来吧,在
create
方法中,也许客户端会写任何东西??像
ContentType.create(“不再是mime类型”)
??