Cách nhanh nhất để viết đối tượng S3 (trong đó tôi có khóa) vào một tệp là gì? Tôi đang sử dụng Java.Cách viết đối tượng S3 vào một tệp?
Trả lời
Trong khi IOUtils.copy()
và IOUtils.copyLarge()
là tuyệt vời, tôi sẽ thích cách học cũ của Looping qua inputstream cho đến khi trở inputstream -1. Tại sao? Tôi đã sử dụng IOUtils.copy() trước đây nhưng có một trường hợp sử dụng cụ thể nếu tôi bắt đầu tải xuống một tệp lớn từ S3 và sau đó vì một số lý do nếu chuỗi đó bị gián đoạn, quá trình tải xuống sẽ không dừng lại và nó sẽ tiếp tục cho đến khi toàn bộ tệp đã được tải xuống.
Tất nhiên, điều này không liên quan gì đến S3, chỉ là thư viện IOUtils.
Vì vậy, tôi thích điều này:
InputStream in = s3Object.getObjectContent();
byte[] buf = new byte[1024];
OutputStream out = new FileOutputStream(file);
while((count = in.read(buf)) != -1)
{
if(Thread.interrupted())
{
throw new InterruptedException();
}
out.write(buf, 0, count);
}
out.close();
in.close();
Lưu ý: Điều này cũng có nghĩa là bạn không cần thư viện bổ sung
lớp Các AmazonS3Client có phương pháp sau đây:
S3Object getObject(String bucketName, String key)
Các S3Object trở có phương pháp ...
java.io.InputStream getObjectContent()
đồi khế, đồi được nội dung đối tượng như một dòng suối. Tôi muốn sử dụng IOUtils từ Apache Commons như thế này:
IOUtils.copy(s3Object.getObjectContent(), new FileOutputStream(new File(filepath)));
tôi nên làm gì nếu tập tin được gzip? –
Kể từ Java 7 (xuất bản trở lại trong tháng 7 năm 2011), có một cách tốt hơn : Files.copy()
tiện ích từ java.util.nio.file
.
Sao chép tất cả byte từ luồng đầu vào vào tệp.
Vì vậy, bạn cần khôngan external library cũng không lăn của riêng bạn byte array loops. Hai ví dụ bên dưới, cả hai đều sử dụng luồng đầu vào từ S3Object.getObjectContent()
.
InputStream in = s3Client.getObject("bucketName", "key").getObjectContent();
1) Viết vào một tập tin mới tại đường dẫn cụ thể:
Files.copy(in, Paths.get("/my/path/file.jpg"));
2) Viết vào một tập tin tạm thời trong tmp mặc định vị trí của hệ thống:
File tmp = File.createTempFile("s3test", "");
Files.copy(in, tmp.toPath(), StandardCopyOption.REPLACE_EXISTING);
(Nếu không chỉ định tùy chọn thay thế tệp hiện có, bạn sẽ nhận được FileAlreadyExistsException
.)
Cũng lưu ý rằng getObjectContent()
Javadocs mong bạn đóng input stream:
Nếu bạn lấy một S3Object, bạn nên đóng input stream này như sớm càng tốt, bởi vì nội dung đối tượng không được đệm trong bộ nhớ và phát trực tiếp từ Amazon S3. Hơn nữa, việc không đóng luồng này có thể khiến hồ bơi yêu cầu bị chặn.
Vì vậy, nên an toàn nhất để bao bọc mọi thứ trong cố gắng nắm bắt cuối cùng và thực hiện in.close();
trong khối cuối cùng.
Ở trên giả định rằng bạn sử dụng SDK chính thức từ Amazon (aws-java-sdk-s3
).
gì về một liner này sử dụng một TransferManager:
TransferManagerBuilder.defaultTransferManager
.download("bucket-name", "key", new File("."))
- 1. Cách viết một đối tượng vào tập tin trong C++
- 2. Cách lưu một đối tượng vào một tệp trong Delphi
- 3. đọc/ghi một đối tượng vào tệp
- 4. s3 cho mỗi đối tượng hết hạn
- 5. Viết QNetworkReply vào một tệp
- 6. cách đặt đối tượng bằng URL bên ngoài vào amazon s3
- 7. Cách viết phạm vi với đối tượng thuộc đối tượng?
- 8. Viết JSONObject vào một tệp
- 9. Hết hạn đối tượng S3 bằng boto
- 10. Thêm tệp vào thùng trên Amazon S3 bằng C#
- 11. Cách tiếp cận điển hình được thực hiện để viết các đối tượng NSString vào một tệp là gì?
- 12. S3 giới hạn đối tượng trong một thùng
- 13. Lưu một đối tượng BufferedImage đến Amazon S3 như một tập tin
- 14. Cách viết một đối tượng đơn giản trong PHP
- 15. Đúc một đối tượng java vào đối tượng [] trong Scala
- 16. Cách tải trực tiếp đối tượng s3 vào bộ nhớ trong java
- 17. Viết đầu ra sqlplus vào một tệp
- 18. tải json từ tệp vào đối tượng
- 19. Làm thế nào để viết một chuỗi vào thùng S3 của Amazon?
- 20. viết XSSFWorkbook vào một tệp zip
- 21. Viết một lượng lớn dữ liệu vào các đối tượng NSData-iOS
- 22. Android: Viết và Nhận đối tượng
- 23. Viết một ma trận Triplet đơn giản vào một tệp?
- 24. Xóa đối tượng hoặc nhóm trong Amazon S3?
- 25. Cách viết đầu ra của AUGraph vào một tệp?
- 26. Cách dễ nhất để viết NSData vào một tệp
- 27. Thông báo về các đối tượng S3 mới
- 28. Thêm đối tượng vào một mảng đối tượng trong Powershell
- 29. Cách thay đổi siêu dữ liệu trên một đối tượng trong Amazon S3
- 30. Amazon S3. Kích thước đối tượng tối đa
Tôi nên làm gì nếu tệp được nén? –
Ngoại lệ OOB chỉ mục ném. –
Hoặc đơn giản là làm 'Files.copy (trong, Paths.get ("/my/path/file.jpg "))' như @Jonik trả lời – Joan