Java通过阿里云的OSSClient中DownloadFileRequest对象来多线程并发下载文件怎么做到每5秒中打印一次下载进度依赖坐标+代码演示顺便连带上传文件进度代码一起提供下
依赖坐标:
<dependency>
<groupId>com.aliyun.oss</groupId>
<artifactId>aliyun-sdk-oss</artifactId>
<version>3.13.2</version>
</dependency>
多线程并发下载文件代码示例:
import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder;
import com.aliyun.oss.model.DownloadFileRequest;
import com.aliyun.oss.model.DownloadFileResult;
import com.aliyun.oss.model.OSSObjectSummary;
import com.aliyun.oss.model.ObjectListing;
import java.io.File;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public class OSSDownloadFileExample {
private static final String endpoint = "your_endpoint";
private static final String accessKeyId = "your_accessKeyId";
private static final String accessKeySecret = "your_accessKeySecret";
private static final String bucketName = "your_bucketName";
private static final String objectName = "your_objectName";
private static final String downloadFileDir = "your_downloadFileDir";
public static void main(String[] args) {
OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
ObjectListing objectListing = ossClient.listObjects(bucketName);
for (OSSObjectSummary objectSummary : objectListing.getObjectSummaries()) {
String key = objectSummary.getKey();
if (key.equals(objectName)) {
ExecutorService executorService = Executors.newFixedThreadPool(5);
DownloadFileRequest downloadFileRequest = new DownloadFileRequest(bucketName, objectName);
downloadFileRequest.setDownloadFileDir(downloadFileDir);
downloadFileRequest.setTaskNum(5);
downloadFileRequest.setPartSize(1024 * 1024);
downloadFileRequest.setThreadNum(5);
DownloadFileResult downloadResult = ossClient.downloadFile(downloadFileRequest);
Runnable progressRunnable = () -> {
while (!downloadResult.isDone()) {
System.out.println("Download progress: " + downloadResult.getConsumedBytes() + "/" + downloadResult.getTotalBytes());
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
};
executorService.execute(progressRunnable);
break;
}
}
ossClient.shutdown();
}
}
上传文件进度代码示例:
import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder;
import com.aliyun.oss.event.ProgressEvent;
import com.aliyun.oss.event.ProgressEventType;
import com.aliyun.oss.event.ProgressListener;
import com.aliyun.oss.model.PutObjectRequest;
import com.aliyun.oss.model.PutObjectResult;
import java.io.File;
public class OSSUploadFileExample {
private static final String endpoint = "your_endpoint";
private static final String accessKeyId = "your_accessKeyId";
private static final String accessKeySecret = "your_accessKeySecret";
private static final String bucketName = "your_bucketName";
private static final String objectName = "your_objectName";
private static final String uploadFilePath = "your_uploadFilePath";
public static void main(String[] args) {
OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
PutObjectRequest putObjectRequest = new PutObjectRequest(bucketName, objectName, new File(uploadFilePath));
putObjectRequest.setProgressListener(new ProgressListener() {
@Override
public void progressChanged(ProgressEvent progressEvent) {
if (progressEvent.getEventType() == ProgressEventType.REQUEST_BYTE_TRANSFER_EVENT) {
long bytes = progressEvent.getBytes();
System.out.println("Upload progress: " + bytes);
}
}
});
PutObjectResult putResult = ossClient.putObject(putObjectRequest);
ossClient.shutdown();
}
}
``
原文地址: https://www.cveoy.top/t/topic/g8zU 著作权归作者所有。请勿转载和采集!