package com.koala.console.apps.mclz.utils;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.IdUtil;
import com.aliyun.oss.ClientBuilderConfiguration;
import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder;
import com.aliyun.oss.model.PutObjectRequest;
import com.koala.console.apps.mclz.model.OSSFile;
import org.springframework.util.StringUtils;
import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.IOException;
import java.util.Date;
import java.util.concurrent.Future;
import java.util.concurrent.LinkedBlockingQueue;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;
public class FileUtil {
public static String bucketName = "";
public static String extranetEndpoint = "";
public static String accessKeyId = "";
public static String accessKeySecret = "";
private static ThreadPoolExecutor executor = new ThreadPoolExecutor(10, 50, 60, TimeUnit.SECONDS, new LinkedBlockingQueue<Runnable>());
public static Future<String> uploadFile(OSSFile ossFile) throws IOException {
Future<String> future = executor.submit(() -> {
ClientBuilderConfiguration conf = new ClientBuilderConfiguration();
conf.setConnectionTimeout(60 * 1000);
conf.setSocketTimeout(60 * 1000);
conf.setMaxErrorRetry(2);
OSS ossClient = new OSSClientBuilder().build(extranetEndpoint, accessKeyId, accessKeySecret, conf);
try {
byte[] content = ossFile.getContent();
String originalFilename = ossFile.getOriginalFilename();
String prefix = ossFile.getPrefix().concat("/");
if (ossFile.isChange()) {
String[] split = StringUtils.split(originalFilename, ".");
prefix = prefix.concat(IdUtil.simpleUUID()).concat("." + split[split.length - 1]);
} else {
prefix = prefix.concat(originalFilename);
}
ossClient.putObject(bucketName, prefix, new ByteArrayInputStream(content));
Date expiration = new Date(System.currentTimeMillis() + 3600L * 1000 * 24 * 365 * 10);
String url = ossClient.generatePresignedUrl(bucketName, prefix, expiration).toString();
return url.split("\\?")[0];
} finally {
ossClient.shutdown();
}
});
return future;
}
public static Object findList(OSSFile ossFile) {
OSS ossClient = new OSSClientBuilder().build(extranetEndpoint, accessKeyId, accessKeySecret);
// 构造ListObjectsRequest请求。
ListObjectsRequest listObjectsRequest = new ListObjectsRequest(bucketName);
// 列出文件。
ObjectListing listing = ossClient.listObjects(listObjectsRequest);
// 遍历所有文件。
System.out.println("Objects:");
for (OSSObjectSummary objectSummary : listing.getObjectSummaries()) {
System.out.println(objectSummary.getKey());
}
// 关闭OSSClient。
ossClient.shutdown();
return listing.getObjectSummaries().stream().map(OSSObjectSummary::getKey).collect(Collectors.toList());
}
public static Object deleteFile(OSSFile ossFile) {
Assert.hasLength(ossFile.getPrefix(), "文件地址不能为空");
// 创建OSSClient实例。
OSS ossClient = new OSSClientBuilder().build(extranetEndpoint, accessKeyId, accessKeySecret);
// 删除文件。如需删除文件夹,请将ObjectName设置为对应的文件夹名称。如果文件夹非空,则需要将文件夹下的所有object删除后才能删除该文件夹。
ossClient.deleteObject(bucketName, ossFile.getPrefix());
// 关闭OSSClient。
ossClient.shutdown();
return null;
}
}
package com.koala.console.apps.mclz.model;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import javax.servlet.http.HttpServletResponse;
/**
* @Author: gongyiyang
* @Date: 2020/4/23 20:22
* @Description:
*/
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class OSSFile {
/**
*路径或文件地址
*/
private String prefix;
/**
* 数据体
*/
private byte[] content;
/**
* 文件名
*/
private String originalFilename;
/**
* 是否重命名
*/
private boolean isChange = false;
}