3535// TransferManager提供异步的上传文件, 下载文件,copy文件的高级API接口
3636// 可以根据文件大小自动的选择上传接口或者copy接口,方便用户使用, 无需自行封装较复杂的分块上传或者分块copy
3737public class TransferManagerDemo {
38+ private static String secretId = "AKIDXXXXXXXX" ;
39+ private static String secretKey = "1A2Z3YYYYYYYYYY" ;
40+ private static String cosRegion = "ap-guangzhou" ;
41+ private static String bucketName = "examplebucket-12500000000" ;
3842 public static void main (String [] args ) {
3943 //multipartUploadWithMetaData();
4044 resumableDownloadFile ();
4145 }
46+
47+ private static TransferManager createTransferManager () {
48+ // 1 初始化用户身份信息(secretId, secretKey)
49+ COSCredentials cred = new BasicCOSCredentials (secretId , secretKey );
50+ // 2 设置bucket的区域, COS地域的简称请参照 https://www.qcloud.com/document/product/436/6224
51+ ClientConfig clientConfig = new ClientConfig (new Region (cosRegion ));
52+ clientConfig .setHttpProtocol (HttpProtocol .https );
53+ // 3 生成cos客户端
54+ COSClient cosclient = new COSClient (cred , clientConfig );
55+
56+ ExecutorService threadPool = Executors .newFixedThreadPool (32 );
57+ // 传入一个threadpool, 若不传入线程池, 默认TransferManager中会生成一个单线程的线程池。
58+ TransferManager transferManager = new TransferManager (cosclient , threadPool );
59+ return transferManager ;
60+ }
61+
4262 // Prints progress while waiting for the transfer to finish.
4363 private static void showTransferProgress (Transfer transfer ) {
4464 System .out .println (transfer .getDescription ());
@@ -59,19 +79,7 @@ private static void showTransferProgress(Transfer transfer) {
5979
6080 // 上传文件, 根据文件大小自动选择简单上传或者分块上传。
6181 private static void uploadFile () {
62- // 1 初始化用户身份信息(secretId, secretKey)
63- COSCredentials cred = new BasicCOSCredentials ("AKIDXXXXXXXX" , "1A2Z3YYYYYYYYYY" );
64- // 2 设置bucket的区域, COS地域的简称请参照 https://www.qcloud.com/document/product/436/6224
65- ClientConfig clientConfig = new ClientConfig (new Region ("ap-beijing-1" ));
66- clientConfig .setHttpProtocol (HttpProtocol .https );
67- // 3 生成cos客户端
68- COSClient cosclient = new COSClient (cred , clientConfig );
69- // bucket名需包含appid
70- String bucketName = "mybucket-12500000000" ;
71-
72- ExecutorService threadPool = Executors .newFixedThreadPool (32 );
73- // 传入一个threadpool, 若不传入线程池, 默认TransferManager中会生成一个单线程的线程池。
74- TransferManager transferManager = new TransferManager (cosclient , threadPool );
82+ TransferManager transferManager = createTransferManager ();
7583
7684 String key = "aaa/bbb.txt" ;
7785 File localFile = new File ("src/test/resources/len30M.txt" );
@@ -96,23 +104,11 @@ private static void uploadFile() {
96104 }
97105
98106 transferManager .shutdownNow ();
99- cosclient .shutdown ();
100107 }
101108
102109 // 上传文件(上传过程中暂停, 并继续上传)
103110 private static void pauseUploadFileAndResume () {
104- // 1 初始化用户身份信息(secretId, secretKey)
105- COSCredentials cred = new BasicCOSCredentials ("AKIDXXXXXXXX" , "1A2Z3YYYYYYYYYY" );
106- // 2 设置bucket的区域, COS地域的简称请参照 https://www.qcloud.com/document/product/436/6224
107- ClientConfig clientConfig = new ClientConfig (new Region ("ap-beijing-1" ));
108- // 3 生成cos客户端
109- COSClient cosclient = new COSClient (cred , clientConfig );
110- // bucket名需包含appid
111- String bucketName = "mybucket-12500000000" ;
112-
113- ExecutorService threadPool = Executors .newFixedThreadPool (4 );
114- // 传入一个threadpool, 若不传入线程池, 默认TransferManager中会生成一个单线程的线程池。
115- TransferManager transferManager = new TransferManager (cosclient , threadPool );
111+ TransferManager transferManager = createTransferManager ();
116112
117113 String key = "aaa/bbb.txt" ;
118114 File localFile = new File ("src/test/resources/len30M.txt" );
@@ -135,22 +131,10 @@ private static void pauseUploadFileAndResume() {
135131 }
136132
137133 transferManager .shutdownNow ();
138- cosclient .shutdown ();
139134 }
140135
141136 private static void multipartUploadWithMetaData () {
142- // 1 初始化用户身份信息(secretId, secretKey)
143- COSCredentials cred = new BasicCOSCredentials ("AKIDXXXXXXXX" , "1A2Z3YYYYYYYYYY" );
144- // 2 设置bucket的区域, COS地域的简称请参照 https://www.qcloud.com/document/product/436/6224
145- ClientConfig clientConfig = new ClientConfig (new Region ("ap-shanghai" ));
146- // 3 生成cos客户端
147- COSClient cosclient = new COSClient (cred , clientConfig );
148- // bucket名需包含appid
149- String bucketName = "mybucket-12500000000" ;
150-
151- ExecutorService threadPool = Executors .newFixedThreadPool (2 );
152- // 传入一个threadpool, 若不传入线程池, 默认TransferManager中会生成一个单线程的线程池。
153- TransferManager transferManager = new TransferManager (cosclient , threadPool );
137+ TransferManager transferManager = createTransferManager ();
154138
155139 String key = "aaa/bbb.txt" ;
156140 File localFile = new File ("src/test/resources/len20M.txt" );
@@ -181,23 +165,11 @@ private static void multipartUploadWithMetaData() {
181165 }
182166
183167 transferManager .shutdownNow ();
184- cosclient .shutdown ();
185168 }
186169
187170 // 批量上传
188171 private static void uploadDirectory () {
189- // 1 初始化用户身份信息(secretId, secretKey)
190- COSCredentials cred = new BasicCOSCredentials ("AKIDXXXXXXXX" , "1A2Z3YYYYYYYYYY" );
191- // 2 设置bucket的区域, COS地域的简称请参照 https://www.qcloud.com/document/product/436/6224
192- ClientConfig clientConfig = new ClientConfig (new Region ("ap-beijing-1" ));
193- // 3 生成cos客户端
194- COSClient cosclient = new COSClient (cred , clientConfig );
195- // bucket名需包含appid
196- String bucketName = "mybucket-12500000000" ;
197-
198- ExecutorService threadPool = Executors .newFixedThreadPool (4 );
199- // 传入一个threadpool, 若不传入线程池, 默认TransferManager中会生成一个单线程的线程池。
200- TransferManager transferManager = new TransferManager (cosclient , threadPool );
172+ TransferManager transferManager = createTransferManager ();
201173
202174 // 设置文件上传到 bucket 之后的前缀目录,设置为 “”,表示上传到 bucket 的根目录
203175 String cos_path = "/prefix" ;
@@ -226,23 +198,11 @@ private static void uploadDirectory() {
226198 }
227199
228200 transferManager .shutdownNow ();
229- cosclient .shutdown ();
230201 }
231202
232203 // 批量下载
233204 private static void downloadDirectory () {
234- // 1 初始化用户身份信息(secretId, secretKey)
235- COSCredentials cred = new BasicCOSCredentials ("AKIDXXXXXXXX" , "1A2Z3YYYYYYYYYY" );
236- // 2 设置bucket的区域, COS地域的简称请参照 https://www.qcloud.com/document/product/436/6224
237- ClientConfig clientConfig = new ClientConfig (new Region ("ap-beijing-1" ));
238- // 3 生成cos客户端
239- COSClient cosclient = new COSClient (cred , clientConfig );
240- // bucket名需包含appid
241- String bucketName = "mybucket-12500000000" ;
242-
243- ExecutorService threadPool = Executors .newFixedThreadPool (4 );
244- // 传入一个threadpool, 若不传入线程池, 默认TransferManager中会生成一个单线程的线程池。
245- TransferManager transferManager = new TransferManager (cosclient , threadPool );
205+ TransferManager transferManager = createTransferManager ();
246206
247207 // 设置要下载的对象的前缀(相当于cos上的一个目录),如果设置成 "",则下载整个 bucket。
248208 String cos_path = "/prefix" ;
@@ -269,23 +229,11 @@ private static void downloadDirectory() {
269229 }
270230
271231 transferManager .shutdownNow ();
272- cosclient .shutdown ();
273232 }
274233
275234 // 将文件下载到本地
276235 private static void downLoadFile () {
277- // 1 初始化用户身份信息(secretId, secretKey)
278- COSCredentials cred = new BasicCOSCredentials ("AKIDXXXXXXXX" , "1A2Z3YYYYYYYYYY" );
279- // 2 设置bucket的区域, COS地域的简称请参照 https://www.qcloud.com/document/product/436/6224
280- ClientConfig clientConfig = new ClientConfig (new Region ("ap-beijing-1" ));
281- // 3 生成cos客户端
282- COSClient cosclient = new COSClient (cred , clientConfig );
283- // bucket名需包含appid
284- String bucketName = "mybucket-12500000000" ;
285-
286- ExecutorService threadPool = Executors .newFixedThreadPool (32 );
287- // 传入一个threadpool, 若不传入线程池, 默认TransferManager中会生成一个单线程的线程池。
288- TransferManager transferManager = new TransferManager (cosclient , threadPool );
236+ TransferManager transferManager = createTransferManager ();
289237
290238 String key = "aaa/bbb.txt" ;
291239 File downloadFile = new File ("src/test/resources/download.txt" );
@@ -303,23 +251,11 @@ private static void downLoadFile() {
303251 }
304252
305253 transferManager .shutdownNow ();
306- cosclient .shutdown ();
307254 }
308255
309256 // 将文件下载到本地(中途暂停并继续开始)
310257 private static void pauseDownloadFileAndResume () {
311- // 1 初始化用户身份信息(secretId, secretKey)
312- COSCredentials cred = new BasicCOSCredentials ("AKIDXXXXXXXX" , "1A2Z3YYYYYYYYYY" );
313- // 2 设置bucket的区域, COS地域的简称请参照 https://www.qcloud.com/document/product/436/6224
314- ClientConfig clientConfig = new ClientConfig (new Region ("ap-beijing-1" ));
315- // 3 生成cos客户端
316- COSClient cosclient = new COSClient (cred , clientConfig );
317- // bucket名需包含appid
318- String bucketName = "mybucket-12500000000" ;
319-
320- ExecutorService threadPool = Executors .newFixedThreadPool (32 );
321- // 传入一个threadpool, 若不传入线程池, 默认TransferManager中会生成一个单线程的线程池。
322- TransferManager transferManager = new TransferManager (cosclient , threadPool );
258+ TransferManager transferManager = createTransferManager ();
323259
324260 String key = "aaa/bbb.txt" ;
325261 File downloadFile = new File ("src/test/resources/download.txt" );
@@ -340,23 +276,20 @@ private static void pauseDownloadFileAndResume() {
340276 e .printStackTrace ();
341277 }
342278
343-
344279 transferManager .shutdownNow ();
345- cosclient .shutdown ();
346280 }
347281
348282
349283 // copy接口支持根据文件大小自动选择copy或者分块copy
350284 // 以下代码展示跨园区拷贝, 即将一个园区的文件拷贝到另一个园区
351285 private static void copyFileForDiffRegion () {
352286 // 1 初始化用户身份信息(secretId, secretKey)
353- COSCredentials cred = new BasicCOSCredentials ("AKIDXXXXXXXX" , "1A2Z3YYYYYYYYYY" );
287+ COSCredentials cred = new BasicCOSCredentials (secretId , secretKey );
354288 // 2 设置bucket的区域, COS地域的简称请参照 https://www.qcloud.com/document/product/436/6224
355- ClientConfig clientConfig = new ClientConfig (new Region ("ap-beijing-1" ));
289+ ClientConfig clientConfig = new ClientConfig (new Region (cosRegion ));
356290 // 3 生成cos客户端
357291 COSClient cosclient = new COSClient (cred , clientConfig );
358292
359-
360293 ExecutorService threadPool = Executors .newFixedThreadPool (32 );
361294 // 传入一个threadpool, 若不传入线程池, 默认TransferManager中会生成一个单线程的线程池。
362295 TransferManager transferManager = new TransferManager (cosclient , threadPool );
@@ -395,17 +328,7 @@ private static void copyFileForDiffRegion() {
395328 // copy接口支持根据文件大小自动选择copy或者分块copy
396329 // 以下代码展示同园区拷贝, 即将同园区的文件拷贝到另一个园区
397330 private static void copyFileForSameRegion () {
398- // 1 初始化用户身份信息(secretId, secretKey)
399- COSCredentials cred = new BasicCOSCredentials ("AKIDXXXXXXXX" , "1A2Z3YYYYYYYYYY" );
400- // 2 设置bucket的区域, COS地域的简称请参照 https://www.qcloud.com/document/product/436/6224
401- ClientConfig clientConfig = new ClientConfig (new Region ("ap-beijing-1" ));
402- // 3 生成cos客户端
403- COSClient cosclient = new COSClient (cred , clientConfig );
404-
405-
406- ExecutorService threadPool = Executors .newFixedThreadPool (32 );
407- // 传入一个threadpool, 若不传入线程池, 默认TransferManager中会生成一个单线程的线程池。
408- TransferManager transferManager = new TransferManager (cosclient , threadPool );
331+ TransferManager transferManager = createTransferManager ();
409332 TransferManagerConfiguration transferManagerConfiguration = new TransferManagerConfiguration ();
410333 transferManagerConfiguration .setMultipartCopyThreshold (20 *1024 *1024 );
411334 transferManager .setConfiguration (transferManagerConfiguration );
@@ -437,14 +360,13 @@ private static void copyFileForSameRegion() {
437360 }
438361
439362 transferManager .shutdownNow ();
440- cosclient .shutdown ();
441363 }
442364
443365 private static void copyFileSetMetadata () {
444366 // 1 初始化用户身份信息(secretId, secretKey)
445- COSCredentials cred = new BasicCOSCredentials ("AKIDXXXXXXXX" , "1A2Z3YYYYYYYYYY" );
367+ COSCredentials cred = new BasicCOSCredentials (secretId , secretKey );
446368 // 2 设置bucket的区域, COS地域的简称请参照 https://www.qcloud.com/document/product/436/6224
447- ClientConfig clientConfig = new ClientConfig (new Region ("ap-guangzhou" ));
369+ ClientConfig clientConfig = new ClientConfig (new Region (cosRegion ));
448370 // 3 生成cos客户端
449371 COSClient cosclient = new COSClient (cred , clientConfig );
450372
@@ -497,18 +419,9 @@ private static void copyFileSetMetadata() {
497419 }
498420
499421 private static void resumableDownloadFile () {
500- // 1 初始化用户身份信息(secretId, secretKey)
501- COSCredentials cred = new BasicCOSCredentials ("AKIDXXXXXXXX" , "1A2Z3YYYYYYYYYY" );
502- // 2 设置bucket的区域, COS地域的简称请参照 https://www.qcloud.com/document/product/436/6224
503- ClientConfig clientConfig = new ClientConfig (new Region ("ap-shanghai" ));
504- // 3 生成cos客户端
505- COSClient cosclient = new COSClient (cred , clientConfig );
422+ TransferManager transferManager = createTransferManager ();
506423
507- ExecutorService threadPool = Executors .newFixedThreadPool (5 );
508- // 传入一个threadpool, 若不传入线程池, 默认TransferManager中会生成一个单线程的线程池。
509- TransferManager transferManager = new TransferManager (cosclient , threadPool );
510-
511- GetObjectRequest getObj = new GetObjectRequest ("mybucket-1000000000" , "/path/to/key" );
424+ GetObjectRequest getObj = new GetObjectRequest (bucketName , "/path/to/key" );
512425
513426 File dstFile = new File ("dstFile" );
514427 Download download = transferManager .download (getObj , dstFile , true );
@@ -524,6 +437,5 @@ private static void resumableDownloadFile() {
524437 }
525438
526439 transferManager .shutdownNow ();
527- cosclient .shutdown ();
528440 }
529441}
0 commit comments