文件上传下载工具类: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();