簡體   English   中英

amazon s3 上傳文件超時

[英]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 對象實例化客戶端來調整客戶端使用的重試次數。

http://docs.amazonwebservices.com/AWSJavaSDK/latest/javadoc/com/amazonaws/ClientConfiguration.html#setMaxErrorRetry(int)

如果您的終端節點位於 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM