keanum75
(Константин Щукин)
14.Февраль.2023 10:37:28
1
Здравствуйте!
Возможно ли переопределение пути к файлу, который создается при
fileStorageUpload
или это TemporaryStorage и из него надо пересохранять куда угодно?
2. Не увидел в
fileMultiUploadField
свойство fileStorage - как указать ему хранилище?
andrey_vb
(Andrey Balabanov)
15.Февраль.2023 03:17:29
2
fileStorageUpload и fileMultiUploadField изначально загружают файл во временное хранилище. А если установлен атрибут fileStoragePutMode="MANUAL" - вы после загрузки вы можете сохранить его в нужное постоянное хранилище.
В документации есть хороший пример .
По умолчанию методы работы с хранилищем типа temporaryStorage.putFileIntoStorage(...) используют основное хранилище.
Если нужно несколько хранилищ и раскладывать файлы в разные - это тоже возможно.
В документации Использование хранилища файлов достаточно подробно расписано то, как это сделать.
keanum75
(Константин Щукин)
19.Февраль.2023 11:13:30
3
Возможно, кому-то поможет - надо разобраться с классами Files, Path, Paths и получилось такое решение задачи:
@Autowired
private FileMultiUploadField upload;
//---
upload.addQueueUploadCompleteListener(queueUploadCompleteEvent -> {
filepath = "некий путь, сформированый на основании данных формы"
+ File.separator;
//Создаем нужную папку
Path pathPrefix = Paths.get(filepath);
try {
Files.createDirectories(pathPrefix);
} catch (IOException e) {
throw new RuntimeException("Error creating ticket's directory ", e);
}
//перебором карты события копируем файлы сначала во временное хранилище
for (Map.Entry<UUID, String> entry : upload.getUploadsMap().entrySet()) {
UUID fileId = entry.getKey();
String fileName = entry.getValue();
//filestorage определяем fileStorageLocator'ом
FileRef fileRef = temporaryStorage.putFileIntoStorage(fileId, fileName, fileStorage);
//а потом из него в созданную папку
InputStream inputStream = fileStorage.openStream(fileRef);
Path path1 = Path.of(filepath, Path.of(fileRef.getFileName()).toString());
try {
Files.copy(inputStream, path1,
StandardCopyOption.REPLACE_EXISTING);
} catch (IOException e) {
throw new RuntimeException("Error saving file", e);
}
}
// сообщаем о радостном и успешном событии
notifications.create()
.withCaption("Uploaded files: " + upload.getUploadsMap().values())
.show();
// чистим лишнее
upload.clearUploads();
});