使用 ruby​​ (aws:s3) 将大文件上传到 S3 - UBUNTU 上的对等方重置连接

发布于 2024-12-09 10:22:15 字数 389 浏览 0 评论 0原文

我正在尝试使用 ruby​​ aws:s3 在 S3 上存储一些大文件:

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

对于 100 MB 左右的文件一切都很好,但对于超过 200 MB 的文件,我在日志中收到“连接由对等方重置”错误。

有人遇到过这种奇怪的现象吗?从网上看,这似乎是一个很大的问题,但我还没有找到明确的解决方案。

我正在使用Ubuntu。

编辑:

这似乎是一个Linux问题,如建议的

I am trying to store some large files on S3 using ruby aws:s3 using:

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

For files of 100 MB or so everything is great but with files of over 200 MB I get a "Connection reset by peer" error in the log.

Has anyone come across this weirdness? From the web, it seems to be an issue with large but I have not yet come across a definitive solution.

I am using Ubuntu.

EDIT:

This seems to be a Linux issue as suggested here.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

魔法少女 2024-12-16 10:22:15

不知道最初的问题可能出在哪里,但作为解决方法,您可以尝试分段上传。

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 分段上传有点棘手,因为每个部分的大小必须超过 5Mb,但这已在上面的代码中得到解决。

No idea where the original problem might be, but as workaround you could try multipart upload.

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 multipart upload is little tricky as each part size must be over 5Mb, but that has been taken care of above code.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文