116 lines
4.1 KiB
Java
116 lines
4.1 KiB
Java
package com.ruoyi.common.utils;
|
|
|
|
import com.aliyun.oss.OSS;
|
|
import com.aliyun.oss.OSSClientBuilder;
|
|
import com.aliyun.oss.model.GeneratePresignedUrlRequest;
|
|
import com.ruoyi.common.utils.uuid.IdUtils;
|
|
import com.ruoyi.common.utils.uuid.UUID;
|
|
import lombok.SneakyThrows;
|
|
import lombok.extern.slf4j.Slf4j;
|
|
import org.apache.commons.io.IOUtils;
|
|
import org.apache.commons.lang3.time.DateUtils;
|
|
import org.springframework.beans.factory.annotation.Value;
|
|
import org.springframework.context.annotation.Configuration;
|
|
import org.springframework.web.multipart.MultipartFile;
|
|
|
|
import java.io.File;
|
|
import java.io.FileInputStream;
|
|
import java.io.IOException;
|
|
import java.io.InputStream;
|
|
import java.net.URL;
|
|
import java.util.Date;
|
|
import java.util.Objects;
|
|
|
|
@Configuration
|
|
@Slf4j
|
|
public class OssUtils {
|
|
|
|
@Value(value = "${oss.endpoint}")
|
|
private String endpoint;
|
|
|
|
@Value(value = "${oss.accessKeyId}")
|
|
private String accessKeyId;
|
|
|
|
@Value(value = "${oss.accessKeySecret}")
|
|
private String accessKeySecret;
|
|
|
|
@Value(value = "${oss.bucketName}")
|
|
private String bucketName;
|
|
|
|
@SneakyThrows
|
|
public String upload(File file) {
|
|
String originalFileName = file.getName();
|
|
String fileName = String.format("%s%s", IdUtils.fastSimpleUUID(), originalFileName.substring(originalFileName.lastIndexOf(".")));
|
|
OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
|
|
String url;
|
|
try (InputStream inputStream = new FileInputStream(file)) {
|
|
ossClient.putObject(bucketName, fileName, inputStream);
|
|
GeneratePresignedUrlRequest request = new GeneratePresignedUrlRequest(bucketName, fileName);
|
|
request.setExpiration(DateUtils.addYears(new Date(), 3));
|
|
url = ossClient.generatePresignedUrl(request).toString();
|
|
log.info("文件上传url = {}", url);
|
|
} finally {
|
|
if (Objects.nonNull(ossClient)) {
|
|
ossClient.shutdown();
|
|
}
|
|
}
|
|
return url;
|
|
}
|
|
|
|
public String upload(MultipartFile file) throws IOException {
|
|
|
|
String originalFileName = file.getOriginalFilename();
|
|
String fileName = UUID.randomUUID() + originalFileName.substring(originalFileName.lastIndexOf("."));
|
|
OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
|
|
String url = new String();
|
|
Date no = new Date();
|
|
no.setYear(no.getYear() + 3);
|
|
try (InputStream inputStream = file.getInputStream()) {
|
|
ossClient.putObject(bucketName, fileName, inputStream);
|
|
GeneratePresignedUrlRequest request = new GeneratePresignedUrlRequest(bucketName, fileName);
|
|
request.setExpiration(no);
|
|
url = ossClient.generatePresignedUrl(request).toString();
|
|
log.info("文件上传 ,url = " + url);
|
|
} finally {
|
|
if (ossClient != null) {
|
|
ossClient.shutdown();
|
|
}
|
|
}
|
|
return url;
|
|
}
|
|
|
|
public int deleteFile(String url) throws IOException {
|
|
OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
|
|
URL url1 = new URL(url);
|
|
try {
|
|
ossClient.deleteObject(bucketName, url1.getPath().split("/")[1]);
|
|
log.info("文件刪除 ,url = " + url);
|
|
} finally {
|
|
if (ossClient != null) {
|
|
ossClient.shutdown();
|
|
}
|
|
}
|
|
return 1;
|
|
}
|
|
|
|
public InputStream getInputStreamByUrl(String url) {
|
|
return getInputStreamByName(getFileNameByUrl(url));
|
|
}
|
|
|
|
public String getFileNameByUrl(String url) {
|
|
int start = url.lastIndexOf("/") + 1;
|
|
int end = url.lastIndexOf("?");
|
|
return end > 0 ? url.substring(start, end) : url.substring(start);
|
|
}
|
|
|
|
@SneakyThrows
|
|
public InputStream getInputStreamByName(String fileName) {
|
|
OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
|
|
try {
|
|
return IOUtils.toBufferedInputStream(ossClient.getObject(bucketName, fileName).getObjectContent());
|
|
} finally {
|
|
ossClient.shutdown();
|
|
}
|
|
}
|
|
}
|