【问题标题】:How to know what is the real content type of the part in multipart request如何知道多部分请求中部分的真实内容类型是什么
【发布时间】:2015-09-21 10:46:33
【问题描述】:

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

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,然后我的服务器会认为它是一个图像,但他会因此而异常。

【问题讨论】:

  • 真的没有办法找到答案。文件扩展名正是为此目的。文件以字节为单位后,它可以是文本、压缩数据、图像、歌曲等。您可以做的是捕捉错误并忽略该文件。您甚至可以在客户端执行此操作,因此服务器不会收到很多垃圾

标签: java http-post mime-types multipartform-data multipart


【解决方案1】:

那是因为您没有设置 MIME 类型。您可以使用其他构造函数FileBody(file, contentType),它采用内容类型:

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("no longer mime type") ??
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-02
  • 2014-05-11
  • 2019-06-23
  • 2021-05-16
  • 2014-01-03
  • 1970-01-01
相关资源
最近更新 更多