При использовании альтернативы FileSystem
с FilePart.transferTo
я вижу UnsupportedOperationException
, выброшенный во время многоэтапной загрузки файла.
Похоже, реализация SynchronossFilePart
, используемая Spring, переключается на другой FileSystemProvider при обработке данных.Есть ли способ предотвратить это и заставить Spring использовать только желаемую файловую систему?
Ниже приведен фрагмент, демонстрирующий проблему использования google-cloud-nio в качестве файловой системы, которая пытается сохранить загруженный файл в google.облачное хранилище.
Я использую Spring Boot 2.1.3
@PostMapping(value = "/upload", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
public Mono<Void> multipartUpload( final @RequestPart("file") FilePart filePart
) {
FileSystem fileSystem = CloudStorageFileSystem.forBucket("my-bucket");
// Code snippet that demonstrates connectivity to GCP is okay
//try {
// Files.write(fileSystem.getPath("successful-file"), "Just here to prove this works, this data is written to the bucket successfully, can be removed".getBytes());
//} catch (IOException e) {
// e.printStackTrace();
//}
return filePart.transferTo(fileSystem.getPath("failed-file"));
}
Соответствующая Stacktrace:
java.lang.UnsupportedOperationException: null
at java.base/java.nio.file.spi.FileSystemProvider.newFileChannel(FileSystemProvider.java:524)
at java.base/java.nio.channels.FileChannel.open(FileChannel.java:292)
at java.base/java.nio.channels.FileChannel.open(FileChannel.java:345)
at org.springframework.http.codec.multipart.SynchronossPartHttpMessageReader$SynchronossFilePart.transferTo(SynchronossPartHttpMessageReader.java:334)