Как закрыть поток чтения AWS S3 (AWSJavaScriptSDK) - PullRequest
0 голосов
/ 12 июня 2018

У меня есть объект AWS S3 и поток чтения, созданный на нем, например:

const s3 = new AWS.S3();

const readStream = s3
  .getObject(params)
  .createReadStream()
  .on('error', err => {
    // do something
  });

Теперь, когда поток не читается до конца (например, поток прерывается клиентом) через 120 секундсобытие error запускается с помощью: TimeoutError: Connection timed out after 120000ms

Как закрыть поток (или весь объект S3)?

Я пытался readStream.destroy(), что задокументировано здесь, но это не работает.

1 Ответ

0 голосов
/ 10 декабря 2018

Я искал решение для подобного случая и наткнулся на эту ветку.

Существует документальный метод AWS Request abort, задокументированный здесь , который позволяет отменить запрос безполучение всех данных (это похоже на http-запрос узла).

Ваш код должен выглядеть примерно так:

const s3 = new AWS.S3();

const request = s3.getObject(params);
const readStream = request.createReadStream()
  .on('error', err => {
    request.abort(); // and do something else also...
  });

Возможно, это ошибка, но в моем случае - яизвлекаю данные, и я хочу прекратить потоковую передачу, когда я достиг определенной точки (то есть обнаружил определенные данные в файле, и нужно только проверить, существуют ли они - мне больше ничего не нужно).

Вышеописанное будет хорошо работать как с модулями request, так и с node-fetch.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...