工具类实现:
import java.io.File;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
/**
* @author 天龙大帅比
* @data 2021/8/6 14:45
*/
public class TencentCosUtil {
//首先得先注册腾讯云对象存储~
// 1.初始化用户身份信息
private static COSCredentials cred = new BasicCOSCredentials("AK开头的放这", "另一个放这");
// 2.设置bucket的区域
private static ClientConfig clientConfig = new ClientConfig(new Region("你自己的区域"));
// 3.bucket的命名规则为{name}-{appid} ,存储桶名称
private static String bucketName = "你自己的bucketName ";
// 4.可以使用访问域名进行内网访问
private static String Url = "你自己的腾讯云url";
/**
* 上传文件到腾讯COS, 根据文件大小自动选择简单上传或者分块上传。
* 可根据自己的网络状况自定义线程池
*/
public static List<String> uploadFile(File localFile) {
//返回腾讯云上传后的文件列表
List<String> tencentURLList = new ArrayList<>();
if (localFile == null) {
return null;
} else {
// 生成cos客户端
COSClient cosclient = new COSClient(cred, clientConfig);
ExecutorService threadPool = Executors.newFixedThreadPool(16);
// 传入一个threadpool, 若不传入线程池, 默认TransferManager中会生成一个单线程的线程池。
TransferManager transferManager = new TransferManager(cosclient, threadPool);
//遍历目录下的文件,存进数组
File[] fs = localFile.listFiles();
File uploadedFile;
String key = "";
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyyMMddHHmmssSSS");
LocalDateTime nowTime = LocalDateTime.now();
String timeFolder = nowTime.format(formatter);
for (int i = 0; i < fs.length; i++) {
uploadedFile = fs[i];
System.out.println("里面有文件" + i + ":" + uploadedFile);
String fileName = uploadedFile.getName();
String suffix = FileUtil.getFileType(uploadedFile);
//判断是否为图片~~
if (suffix.equals("jpg") || suffix.equals("jpeg")) {
key = "/images/" + timeFolder + "/" + fileName;
} else {
key = "/videos/" + timeFolder + "/" + fileName;
}
PutObjectRequest putObjectRequest = new PutObjectRequest(bucketName, key, uploadedFile);
// 设置高级接口的分块上传阈值和分块大小为10MB,这里可以自己设置
TransferManagerConfiguration transferManagerConfiguration = new TransferManagerConfiguration();
transferManagerConfiguration.setMultipartUploadThreshold(10 * 1024 * 1024);
transferManagerConfiguration.setMinimumUploadPartSize(10 * 1024 * 1024);
transferManager.setConfiguration(transferManagerConfiguration);
try {
long startTime = System.currentTimeMillis();
Upload upload = transferManager.upload(putObjectRequest);
UploadResult uploadResult = upload.waitForUploadResult();
long endTime = System.currentTimeMillis();
System.out.println("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~");
System.out.println("上传成功!" + i + "used time: " + (endTime - startTime) / 1000 + "s");
System.out.println("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~");
System.out.println("去看看" + Url + key);
System.out.println(uploadResult.getETag());
tencentURLList.add(Url + key);
} catch (CosServiceException e) {
e.printStackTrace();
System.out.println("上传失败!CosServiceException");
} catch (CosClientException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
System.out.println("上传失败!InterruptedException");
}
}
transferManager.shutdownNow();
cosclient.shutdown();
return tencentURLList;
}
}
}
在外部调用的时候,也写一个集合来存储返回的list就行了,再遍历获取!
单个文件就修改一下相应的list代码为String就行~