У меня есть веб-приложение, которое должно читать шейп-файл с пользовательского диска. Я использую класс MultipartFile
(https://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/web/multipart/MultipartFile.html), чтобы загрузить его. Насколько я понимаю, восстановить путь к файлу из MultipartFile
невозможно. Это вызывает у меня проблему, потому что я использую следующий код для интерпретации содержимого шейп-файла (я прикрепляю крайне важный конструктор):
private ShapeFile(final File srcFile) {
try {
final Map<String, Serializable> params = ImmutableMap.of("url", srcFile.toURI().toURL());
dataStore = new ShapefileDataStoreFactory().createDataStore(params);
final String typeName = dataStore.getTypeNames()[0];
featureType = dataStore.getSchema(typeName);
featureSource = dataStore.getFeatureSource(typeName);
} catch (IOException exception) {
throw new RuntimeException(exception);
}
}
Шейп-файлу требуется File
в конструкторе, а File
строго связан с абсолютным путем к файлу. Поэтому я не могу использовать MultipartFile
и создать File
в памяти (т.е. не в файловой системе) на основе этого. Что я могу сделать, так это получить InputStream
из MultipartFile
, getInputStream()
или getBytes()
.
Есть ли способ изменить конструктор Shapefile
таким образом, чтобы он принимал InputStream
или таблицу байтов? Я хотел бы избежать создания временного файла.
Спасибо за предложения.