我正在开发一个应用程序,允许用户同时将多达 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 应该比这更有能力,所以我很沮丧从我的开发机器上传几个小文件失败。
任何帮助将不胜感激。