in server/src/main/java/com/epam/aidial/core/server/controller/UploadFileController.java [31:70]
protected Future<?> handle(ResourceDescriptor resource, boolean hasWriteAccess) {
if (resource.isFolder()) {
return context.respond(HttpStatus.BAD_REQUEST, "File name is missing");
}
if (!ResourceDescriptorFactory.isValidResourcePath(resource)) {
return context.respond(HttpStatus.BAD_REQUEST, "Resource name and/or parent folders must not end with .(dot)");
}
return proxy.getVertx().executeBlocking(() -> {
EtagHeader etag = validateRequest(context.getRequest(), resource);
context.getRequest()
.setExpectMultipart(true)
.uploadHandler(upload -> {
String contentType = upload.contentType();
Pipe<Buffer> pipe = new PipeImpl<>(upload).endOnFailure(false);
BlobWriteStream writeStream = new BlobWriteStream(proxy.getVertx(), proxy.getResourceService(),
proxy.getStorage(), resource, etag, contentType);
pipe.to(writeStream)
.onSuccess(success -> {
FileMetadata metadata = writeStream.getMetadata();
context.putHeader(HttpHeaders.ETAG, metadata.getEtag())
.exposeHeaders()
.respond(HttpStatus.OK, metadata);
})
.onFailure(error -> {
writeStream.abortUpload(error);
log.warn("Failed to upload file: {}", resource.getUrl(), error);
context.respond(error, "Failed to upload file: " + resource.getUrl());
});
});
return Future.succeededFuture();
}, false)
.otherwise(error -> {
log.warn("Failed to upload file: {}", resource.getUrl(), error);
context.respond(error, "Failed to upload file: " + resource.getUrl());
return null;
});
}