У меня есть REST API для загрузки файлов, реализованный с использованием Джерси. Параметр InputStream может иметь значение NULL в зависимости от расширения загруженного файла. Обычно я хочу обрабатывать файлы csv, которые проходят как нулевые.
@POST
@Consumes(MediaType.MULTIPART_FORM_DATA)
@Path("/upload")
public Response upload(@FormDataParam("file") InputStream fileInputStream,
@FormDataParam("file") File file,
@FormDataParam("file") FormDataContentDisposition content,
@FormDataParam("filename") String filename)
{
if(LOG.isDebugEnabled()) { LOG.debug("Received file named " + filename); }
if(LOG.isDebugEnabled()) { LOG.debug("InputStream is " + (fileInputStream == null ? null : fileInputStream.toString())); }
if(LOG.isDebugEnabled()) { LOG.debug("File is " + (file == null ? null : file.toString())); }
if(LOG.isDebugEnabled()) { LOG.debug("Disposition is " + (content == null ? null : content.toString())); }
return Response.ok().build();
}
Я загружаю образец файла. Если файл назван «test-data», то вывод будет:
2020-06-12 14:44:08,618 DEBUG http-nio-8080-exec-22 my.RestResource:65 - Received file named test-data
2020-06-12 14:44:08,619 DEBUG http-nio-8080-exec-22 my.RestResource:66 - InputStream is org.jvnet.mimepull.DataHead$ReadMultiStream@57392c2d
2020-06-12 14:44:08,620 DEBUG http-nio-8080-exec-22 my.RestResource:67 - File is /tmp/tomcat8-tomcat8-tmp/rep5012110996391644259tmp
2020-06-12 14:44:08,620 DEBUG http-nio-8080-exec-22 my.RestResource:68 - Disposition is form-data; filename="test-data"; name="file"
Если я теперь переименую тот же файл образца как «test-data.csv», то результат будет:
2020-06-12 14:46:23,559 DEBUG http-nio-8080-exec-21 my.RestResource:65 - Received file named test-data.csv
2020-06-12 14:46:23,560 DEBUG http-nio-8080-exec-21 my.RestResource:66 - InputStream is null
2020-06-12 14:46:23,560 DEBUG http-nio-8080-exec-21 my.RestResource:67 - File is /tmp/tomcat8-tomcat8-tmp/rep7178313283736460129tmp
2020-06-12 14:46:23,560 DEBUG http-nio-8080-exec-21 my.RestResource:68 - Disposition is form-data; filename="test-data.csv"; name="file"
ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ: Мой класс написан как плагин для продукта, реализующего фреймворк, поэтому есть уровень конфигурации и фильтров, которые я не контролирую и, возможно, перехватывает загруженный файл и вызывает это, но я могу ' t найти в базе кода какие-либо ссылки на mimetypes или проверки расширений. Любые подсказки о том, где это можно контролировать, помогут мне сузить круг поиска.
Спасибо.