Загрузка больших файлов в S3 с помощью ruby ​​(aws: s3) - сброс соединения через peer на UBUNTU - PullRequest
3 голосов
/ 13 октября 2011

Я пытаюсь сохранить несколько больших файлов на S3, используя ruby ​​ aws: s3 используя:

S3Object.store("video.mp4", open(file), 'bucket', :access => :public_read)

Для файлов размером 100 МБ или около того все отлично, но с файлами более200 МБ Я получаю сообщение об ошибке «Сброс соединения по одноранговой сети» в журнале.

Кто-нибудь сталкивался с этой странностью?Из Интернета это кажется большой проблемой, но я еще не нашел окончательного решения.

Я использую Ubuntu.

РЕДАКТИРОВАТЬ:

Это кажетсябыть проблемой Linux, как предложено здесь .

1 Ответ

0 голосов
/ 13 июля 2012

Не знаю, где может быть первоначальная проблема, но в качестве обходного пути вы можете попробовать многокомпонентную загрузку.

filename = "video.mp4"
min_chunk_size = 5 * 1024 * 1024  # S3 minimum chunk size (5Mb)
    @object.multipart_upload do |upload|
      io = File.open(filename)

      parts = []

      bufsize = (io.size > 2 * min_chunk_size) ? min_chunk_size : io.size
      while buf = io.read(bufsize)
        md5 = Digest::MD5.base64digest(buf)

        part = upload.add_part(buf)
        parts << part

        if (io.size - (io.pos + bufsize)) < bufsize
          bufsize = (io.size - io.pos) if (io.size - io.pos) > 0
        end
      end

      upload.complete(parts)
    end

Многокомпонентная загрузка S3 немного сложна, так как размер каждой части должен быть больше 5 Мб, но это уже сделанозаботиться о вышеуказанном коде.

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