- 产品文档
- > 存储与 CDN
- > 对象存储
- > AWS S3 兼容
- > AWS S3 SDK
- > S3 Java SDK手册
- > 文件上传下载工具类:TransferManager
文件上传下载工具类:TransferManager
前文提到的是NOS Java SDK提供的基础接口,为方便用户进行文件上传下载,NOS Java SDK提供了封装更好、使用更方便的工具类:TransferManager。
TransferManager的初始化
//先实例化一个AmazonS3
String accessKey = "your-accesskey";
String secretKey = "your-secretKey ";
Credentials credentials = new BasicCredentials(accessKey, secretKey);
AmazonS3 AmazonS3 = new AmazonS3(credentials);
AmazonS3.setEndpoint(endPoint);
//然后通过AmazonS3对象来初始化TransferManager
TransferManager transferManager = new TransferManager(AmazonS3);
Download download = transferManager.download(TestConfig.bucketName,key,new File("localFilePath"));
try {
download.waitForCompletion();
} catch (InterruptedException e) {
e.printStackTrace();
}
使用TransferManager进行文件上传
TransferManager会根据文件大小,选择是否进行分块上传。当文件小于等于16M时,TransferManager会自动调用PutObject接口,否则TransferManager会自动对文件进行分块上传。
1、上传本地文件:
如果指定上传的本地文件大于16M,TransferManager会自动对文件进行分块,并发调用分块上传接口进行上传,大大提高上传文件的速度。
//上传文件
Upload upload = transferManager.upload("your-bucketname", "your-objectname", new File("your-file"));
try {
upload.waitForUploadResult();
} catch (InterruptedException e) {
e.printStackTrace();
}
2、流式上传:
您也可以使用TransferManager进行流式上传,但是相比本地文件上传,流式上传无法做到多个分块并发上传,只能一个分块一个分块顺序上传。
//流式上传文件
ObjectMetadata objectMetadata = new ObjectMetadata();
objectMetadata.setContentLength(file.length());
Upload upload = transferManager.upload("your-bucketname", "your-objectname", inputStream, objectMetadata);
UploadResult result = upload.waitForUploadResult();
3、上传目录
您可以使用TransferManager将某个目录下的文件全部上传到NOS,对象名即文件名
3.1 不支持多级目录
MultipleFileUpload result = transferManager.uploadDirectory("your-buckename", null, new File("dirPath"), false);
result.waitForCompletion();
3.2 支持多级目录,会递归的上传目录下的所有文件
MultipleFileUpload result = transferManager.uploadDirectory("your-buckename", null, new File("dirPath"), true);
result.waitForCompletion();
4、下载文件
File file = new File("your-destFile");
Download download = transferManager.download("your-bucketname", "your-objectname", file);
download.waitForCompletion();