引入依赖
<dependency>
<groupId>com.aliyun.oss</groupId>
<artifactId>aliyun-sdk-oss</artifactId>
<version>3.6.0</version>
</dependency>
封装获取OSSClient对象工具类
@Component
public class OssClientUtil {
private volatile static OSSClient client;
private static String endpoint;
private static String accessKeyId;
private static String accessKeySecret;
/**
* 设置阿里云oss的Endpoint
* @param endpoint http://oss-cn-chengdu.aliyuncs.com
*/
@Value("${aliyun.oss.endpoint}")
public void setEndpoint(String endpoint) {
OssClientUtil.endpoint = endpoint;
}
/**
* 设置阿里云oss的accessKeyId
* @param accessKeyId LTAI4G6PHtKmhXCQECLd5uVk
*/
@Value("${aliyun.oss.accessKeyId}")
public void setAccessKeyId(String accessKeyId) {
OssClientUtil.accessKeyId = accessKeyId;
}
/**
* 设置阿里云oss的accessKeySecret
* @param accessKeySecret FEH56pV2dZsEjS8RcJsPMY6ES2W4DB
*/
@Value("${aliyun.oss.accessKeySecret}")
public void setAccessKeySecret(String accessKeySecret) {
OssClientUtil.accessKeySecret = accessKeySecret;
}
/**
* 私有无参构造,阻止通过new创建对象
*/
private OssClientUtil(){}
/**
* 双重校验
* @return
*/
public static OSSClient getOssClient(){
if (client == null) {
synchronized (OssClientUtil.class){
if (client == null) {
//client = new OSSClient(endpoint, accessKeyId, accessKeySecret,getDefalutClientConfig());
client = new OSSClient(endpoint,getCredentialsProvider(),getDefalutClientConfig());
}
}
}
return client;
}
/**
* 关闭OSSClient,关闭后必须重新启动才能使用
*/
public static void shutdown(){
if(null != client){
client.shutdown();
client = null;
}
}
/* ----------------------------------------- 配置 ----------------------------------------- */
/**
* 提供身份凭证
* @return
*/
private static CredentialsProvider getCredentialsProvider(){
return new DefaultCredentialProvider(accessKeyId,accessKeySecret);
}
private static ClientConfiguration getDefalutClientConfig(){
// 创建ClientConfiguration。ClientConfiguration是OSSClient的配置类,可配置代理、连接超时、最大连接数等参数。
ClientConfiguration conf = new ClientConfiguration();
// 设置OSSClient允许打开的最大HTTP连接数,默认为1024个。
conf.setMaxConnections(200);
// 设置Socket层传输数据的超时时间,默认为50000毫秒。
conf.setSocketTimeout(50000);
// 设置建立连接的超时时间,默认为50000毫秒。
conf.setConnectionTimeout(50000);
// 设置从连接池中获取连接的超时时间(单位:毫秒),默认不超时。
conf.setConnectionRequestTimeout(2000);
// 设置连接空闲超时时间。超时则关闭连接,默认为60000毫秒。
conf.setIdleConnectionTime(60000);
// 设置失败请求重试次数,默认为3次。
conf.setMaxErrorRetry(5);
// 设置是否支持将自定义域名作为Endpoint,默认支持。
conf.setSupportCname(true);
// 设置连接OSS所使用的协议(HTTP/HTTPS),默认为HTTP。
conf.setProtocol(Protocol.HTTP);
return conf;
}
}
文件上传工具类
@Component
public class ALiYunUpload {
@Value("${aliyun.oss.bucketName}")
private String bucketName;
/**
* 上传接收的文件到阿里云
* @param file
* @return
*/
public Map<String,Object> addFile(MultipartFile file) {
//获取存到aliyun
String urls="";
InputStream inputStream = null;
Map<String,Object> map = new HashMap<>();
try {
if(!file.isEmpty()) {
inputStream = file.getInputStream();
//365天有效
Date expiration = new Date(System.currentTimeMillis() + 3600L * 1000 * 24 * 365 * 2);
String fileName = file.getOriginalFilename();
String suffix = fileName.substring(fileName.lastIndexOf("."));
String key = UUID.randomUUID().toString() + suffix;
System.out.println(expiration);
map.put("fileName",key);
// 生成以GET方法访问的签名URL,访客可以直接通过浏览器访问相关内容。
URL url = OssClientUtil.getOssClient().generatePresignedUrl(bucketName, key, expiration);
System.out.println("图片访问地址" + url);
PutObjectResult putObject = OssClientUtil.getOssClient().putObject(bucketName, key, inputStream);
if (putObject == null || StringUtils.isEmpty(putObject.getETag())) {
return null;
}
if(StringUtils.isEmpty(urls)) {
urls = url.toString();
}else {
urls=urls+"&&"+url;
}
map.put("url",urls);
}
} catch (IOException e) {
e.printStackTrace();
}finally {
if (inputStream != null) {
try {
inputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
return map;
}
/**
* 删除文件
* @param key
* @return
*/
public boolean delFile(String key) {
OssClientUtil.getOssClient().deleteObject(bucketName,key);
return true;
}
public Map<String,Object> addByte(byte[] data,String fileName) {
//获取存到aliyun
String urls="";
Map<String,Object> map = new HashMap<>();
//365天有效
Date expiration = new Date(System.currentTimeMillis() + 3600L * 1000 * 24 * 365);
map.put("fileName",fileName);
String suffix = ".jpg";
String key = UUID.randomUUID().toString() + suffix;
System.out.println(expiration);
// 生成以GET方法访问的签名URL,访客可以直接通过浏览器访问相关内容。
URL url = OssClientUtil.getOssClient().generatePresignedUrl(bucketName, key, expiration);
System.out.println("图片访问地址" + url);
OSSClient ossClient = OssClientUtil.getOssClient();
//上传Byte数组。
PutObjectResult putObject = ossClient.putObject(bucketName, key, new ByteArrayInputStream(data));
if (putObject == null || StringUtils.isEmpty(putObject.getETag())) {
return null;
}
if(StringUtils.isEmpty(urls)) {
urls = url.toString();
}else {
urls=urls+"&&"+url;
}
map.put("url",urls);
map.put("uuid",key);
return map;
}
/**
* 用于excel导入
* @param data
* @return
*/
public Map<String,Object> addExcel(byte[] data) {
//获取存到aliyun
String urls="";
Map<String,Object> map = new HashMap<>();
//365天有效
Date expiration = new Date(System.currentTimeMillis() + 3600L * 1000 * 24 * 365);
String suffix = ".jpg";
String key = UUID.randomUUID().toString() + suffix;
System.out.println(expiration);
// 生成以GET方法访问的签名URL,访客可以直接通过浏览器访问相关内容。
URL url = OssClientUtil.getOssClient().generatePresignedUrl(bucketName, key, expiration);
System.out.println("图片访问地址" + url);
OSSClient ossClient = OssClientUtil.getOssClient();
//上传Byte数组。
PutObjectResult putObject = ossClient.putObject(bucketName, key, new ByteArrayInputStream(data));
if (putObject == null || StringUtils.isEmpty(putObject.getETag())) {
return null;
}
if(StringUtils.isEmpty(urls)) {
urls = url.toString();
}else {
urls=urls+"&&"+url;
}
map.put("url",urls);
map.put("uuid",key);
return map;
}
public Map<String,Object> addFileApp(MultipartFile file) {
//获取存到aliyun
String urls="";
InputStream inputStream = null;
Map<String,Object> map = new HashMap<>();
try {
if(!file.isEmpty()) {
inputStream = file.getInputStream();
//365天有效
Date expiration = new Date(System.currentTimeMillis() + 3600L * 1000 * 24 * 365 * 10);
String fileName =file.getOriginalFilename();
// String suffix = fileName.substring(fileName.lastIndexOf("."));
// String key = UUID.randomUUID().toString() + suffix;
// System.out.println(expiration);
map.put("fileName",fileName);
// 生成以GET方法访问的签名URL,访客可以直接通过浏览器访问相关内容。
URL url = OssClientUtil.getOssClient().generatePresignedUrl(bucketName, fileName, expiration);
System.out.println("图片访问地址" + url);
PutObjectResult putObject = OssClientUtil.getOssClient().putObject(bucketName, fileName, inputStream);
if (putObject == null || StringUtils.isEmpty(putObject.getETag())) {
return null;
}
if(StringUtils.isEmpty(urls)) {
urls = url.toString();
}else {
urls=urls+"&&"+url;
}
map.put("url",urls);
// map.put("uuid",key);
}
} catch (IOException e) {
e.printStackTrace();
}finally {
if (inputStream != null) {
try {
inputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
return map;
}
/**
* 阿里云上传
* @param file
* * @param folder 文件夹及名称
* @return
*/
public Map<String,Object> addPhotoFile(MultipartFile[] file,String folder) {
//获取存到aliyun
StringBuilder urls= new StringBuilder();
InputStream inputStream = null;
Map<String,Object> map = new HashMap<>();
try {
for (int i = 0;i<file.length;i++){
if(!file[i].isEmpty()) {
inputStream = file[i].getInputStream();
//1年有效
Date expiration = new Date(System.currentTimeMillis() + 3600L * 1000 * 24 * 365 * 30);
// 生成以GET方法访问的签名URL,访客可以直接通过浏览器访问相关内容。
String path = folder+TimeUtil.dateToStr(new Date())+"/"+UUIDUtils.get32UUID() + ".jpg";
URL url = OssClientUtil.getOssClient().generatePresignedUrl(bucketName, path, expiration);
PutObjectResult putObject = OssClientUtil.getOssClient().putObject(bucketName, path, inputStream);
if (putObject == null || StringUtils.isEmpty(putObject.getETag())) {
return null;
}
urls.append(url.toString());
if(i<file.length-1){
urls.append(",");
}
}
}
map.put("url", urls.toString());
} catch (IOException e) {
e.printStackTrace();
}finally {
if (inputStream != null) {
try {
inputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
return map;
}
/**
* 阿里云pdf上传
* @param file
* @return
*/
public Map<String,Object> addPdfFile(MultipartFile file,String folder) {
//获取存到aliyun
String urls = "";
InputStream inputStream = null;
Map<String, Object> map = new HashMap<>();
try {
if (!file.isEmpty()) {
inputStream = file.getInputStream();
//1年有效
Date expiration = new Date(System.currentTimeMillis() + 3600L * 1000 * 24 * 365 * 30);
//文件名
String fileName = System.currentTimeMillis() + "-" + UUIDUtils.get8UUID() + ".pdf";
map.put("fileName", fileName);
String pathAndName = folder+ TimeUtil.dateToStr(new Date())+"/"+fileName;
// 生成以GET方法访问的签名URL,访客可以直接通过浏览器访问相关内容。
URL url = OssClientUtil.getOssClient().generatePresignedUrl(bucketName, pathAndName, expiration);
PutObjectResult putObject = OssClientUtil.getOssClient().putObject(bucketName, pathAndName, inputStream);
if (putObject == null || StringUtils.isEmpty(putObject.getETag())) {
return null;
}
if (StringUtils.isEmpty(urls)) {
urls = url.toString();
} else {
urls = urls + "&&" + url;
}
map.put("url", urls);
}
} catch (IOException e) {
e.printStackTrace();
} finally {
if (inputStream != null) {
try {
inputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
return map;
}
}