Название в основном объясняет само себя.
У меня есть конечная точка REST с VertX
. После его нажатия у меня появляется некоторая логика, которая приводит к объекту AWS-S3
.
Моя предыдущая логика заключалась не в загрузке в S3
, а в том, чтобы сохранить его локально. Итак, я могу сделать это в ответе routerCxt.response().sendFile(file_path...)
.
Теперь, когда файл находится в S3, мне нужно загрузить его локально, прежде чем я смогу вызвать приведенный выше код.
Это медленно и неэффективно. Я хочу передать объект S3 напрямую в объект response
.
В Express
это примерно так. s3.getObject(params).createReadStream().pipe(res);
.
Я немного прочитал и увидел, что VertX
имеет класс с именем Pump
. Но он используется vertx.fileSystem()
в примерах.
Я не уверен, как подключить InputStream
от S3
'sgetObjectContent()
к vertx.fileSystem()
, чтобы использовать Pump
.
Я даже не уверен, что Pump
правильный путь, потому что я пытался использовать Pump
для возврата локального файла, но это не сработало.
router.get("/api/test_download").handler(rc -> {
rc.response().setChunked(true).endHandler(endHandlr -> rc.response().end());
vertx.fileSystem().open("/Users/EmptyFiles/empty.json", new OpenOptions(), ares -> {
AsyncFile file = ares.result();
Pump pump = Pump.pump(file, rc.response());
pump.start();
});
});
Есть ли какой-нибудь пример для этого?
Спасибо
response
headers
? Когда я не добавлял ничего лишнегоheader
, он не загружал его, когда я добавилContent-Type: binary/octet-stream
, он загружал пустой файл. Я заранее проверил временный URL-адрес, и он его загружает. Так что, вероятно, причина не в этом. 06.08.2018