2015-09-21 3 views
1

Я посылаю многослойный запрос от моего клиента к серверу, как это:Как знать, что реальный тип содержимого части в многочастном запросе

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, а затем мой сервер будет думать, что это изображение, но из-за этого он будет исключать.

+2

Невозможно найти способ найти. Расширения файлов предназначены для этой цели точно. После того, как файл находится в байтах, это может быть текст, сжатые данные, изображения, песни и т. Д. Что вы можете сделать, это поймать ошибку и игнорировать этот файл. Вы можете сделать это на стороне клиента даже, поэтому сервер не получает много мусора – BlueMoon93

ответ

2

Это потому, что вы не устанавливаете тип 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")); 
+0

Позвольте мне проверить u и вернуться –

+0

Подождите пожалуйста, в методе 'create', возможно, клиент пишет что-нибудь? например 'ContentType.create (" no longer mime type ")' ?? –