AWS CLI 实际上使用 boto(Python 开发工具包)本身,而不是 Java 开发工具包。
aws s3 sync 比 aws s3 cp 快,aws s3 cp 比 AWS Java SDK 快,因为 AWS CLI 使用多线程同时复制多个文件以加快复制操作。
使用适用于 Java 的 AWS 开发工具包
您可以将TransferManager 用于 Amazon S3 操作来实现类似的行为。
下面是示例代码sn-p:
import com.amazonaws.AmazonServiceException;
import com.amazonaws.services.s3.transfer.MultipleFileUpload;
import com.amazonaws.services.s3.transfer.TransferManager;
import com.amazonaws.services.s3.transfer.TransferManagerBuilder;
import com.amazonaws.services.s3.transfer.Upload;
import java.io.File;
import java.util.ArrayList;
import java.util.Arrays;
File f = new File(file_path);
TransferManager xfer_mgr = TransferManagerBuilder.standard().build();
try {
Upload xfer = xfer_mgr.upload(bucket_name, key_name, f)
// loop with Transfer.isDone()
XferMgrProgress.showTransferProgress(xfer);
// or block with Transfer.waitForCompletion()
XferMgrProgress.waitForCompletion(xfer);
} catch (AmazonServiceException e) {
System.err.println(e.getErrorMessage());
System.exit(1);
}
xfer_mgr.shutdownNow();
以下是来自 AWS 文档的参考:
使用适用于 JavaScript 的 AWS 开发工具包:
您可以使用upload 方法实现类似的行为。
upload(params = {}, [options], [callback]) ⇒ AWS.S3.ManagedUpload
上传任意大小的缓冲区、blob 或流,如果有效负载足够大,则使用部分的智能并发处理。您可以通过设置options 来配置并发队列大小。请注意,这是 SDK 可以使用流体重试请求的唯一操作。
示例:
- 上传流对象
var params = {Bucket: 'bucket', Key: 'key', Body: stream};
s3.upload(params, function(err, data) {
console.log(err, data);
});
- 上传并发为 1 且 partSize 为 10mb 的流
var params = {Bucket: 'bucket', Key: 'key', Body: stream};
var options = {partSize: 10 * 1024 * 1024, queueSize: 1};
s3.upload(params, options, function(err, data) {
console.log(err, data);
});
在第二个示例中,您可以看到 queueSize 定义并发以实现并行。