0

我正在开发一个应用程序,允许用户同时将多达 10 个图像或文档文件上传到 S3。不幸的是,503 Slow Down当我只上传几个小于 1.2 MB 的文件时,我得到了一个错误,我无法弄清楚原因。

我正在使用此处找到的 JavaScript:https ://hexdocs.pm/phoenix_live_view/uploads-external.html

let Uploaders = {}

Uploaders.S3 = function(entries, onViewError){
  entries.forEach(entry => {
    let formData = new FormData()
    let {url, fields} = entry.meta
    Object.entries(fields).forEach(([key, val]) => formData.append(key, val))
    formData.append("file", entry.file)
    let xhr = new XMLHttpRequest()
    onViewError(() => xhr.abort())
    xhr.onload = () => xhr.status === 204 || entry.error()
    xhr.onerror = () => entry.error()
    xhr.upload.addEventListener("progress", (event) => {
      if(event.lengthComputable){
        let percent = Math.round((event.loaded / event.total) * 100)
        entry.progress(percent)
      }
    })

    xhr.open("POST", url, true)
    xhr.send(formData)
  })
}

let liveSocket = new LiveSocket("/live", Socket, {
  uploaders: Uploaders,
  params: {_csrf_token: csrfToken}
})

此代码可以很好地上传一个,有时是两个或更多文件到 S3,但如果文件数量为 4 个或更多,通常会无法上传某些文件并出现 503 Slow down 错误。我以 5 MB 的块上传它们,这是 S3 允许的最小块大小,但是因为所有文件的大小都小于 5 MB,所以它们都应该在一个块中上传。我也将块超时更改为一分钟。

我还尝试在更近的区域创建一个新的 S3 存储桶并改用它,但问题仍然存在。我认为 S3 应该比这更有能力,所以我很沮丧从我的开发机器上传几个小文件失败。

任何帮助将不胜感激。

4

0 回答 0