[英]amazon s3 upload file time out
我有一個 800KB 的 JPG 文件。 我嘗試上傳到 S3 並不斷收到超時錯誤。 你能弄清楚什么是錯的嗎? 800KB 對於上傳來說是相當小的。
錯誤消息:您與服務器的套接字連接未在超時期限內讀取或寫入。 空閑連接將被關閉。
HTTP 狀態碼:400
AWS 錯誤代碼:RequestTimeout
Long contentLength = null;
System.out.println("Uploading a new object to S3 from a file\n");
try {
byte[] contentBytes = IOUtils.toByteArray(is);
contentLength = Long.valueOf(contentBytes.length);
} catch (IOException e) {
System.err.printf("Failed while reading bytes from %s", e.getMessage());
}
ObjectMetadata metadata = new ObjectMetadata();
metadata.setContentLength(contentLength);
s3.putObject(new PutObjectRequest(bucketName, key, is, metadata));
IOUtils.toByteArray 是否可能正在耗盡您的輸入流,以便在進行服務調用時不再從中讀取數據? 在這種情況下,stream.reset() 可以解決這個問題。
但是,如果您只是上傳一個文件(而不是任意 InputStream),您可以使用更簡單的 AmazonS3.putObject() 形式,它接受一個文件,然后您根本不需要計算內容長度。
http://docs.amazonwebservices.com/AWSJavaSDK/latest/javadoc/com/amazonaws/services/s3/AmazonS3.html#putObject(java.lang.String , java.lang.String, java.io.File)
這將多次自動重試任何此類網絡錯誤。 您可以通過使用 ClientConfiguration 對象實例化客戶端來調整客戶端使用的重試次數。
如果您的終端節點位於 VPC 后面,它也會以靜默方式出錯。 您可以在此處為 s3 添加新的 VPC 端點
https://aws.amazon.com/blogs/aws/new-vpc-endpoint-for-amazon-s3/
我要感謝加布里埃爾的回答。 我使用 rclone 實現了 S3 的端點,看到我的錯誤從 100 變為0 。 這使得 ECS 到 S3 的傳輸通過其內部網絡進行 - 這顯着更快且可靠。 我要補充的唯一另一點是永遠不要嘗試將網絡驅動器備份到 S3 - 那里的世界受到傷害。
這個命令(和選項)一整天都在為我工作: rclone --progress copy /home/sound/effects/$formatName/$fileType/ $S3CONFIG:$S3BUCKET/$formatName-$fileType/$fileType/ -- contimeout 10m0s --max-backlog 100 --transfers 8
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.