package com.ruoyi.file.utils;
|
|
import com.aliyun.oss.ClientException;
|
import com.aliyun.oss.OSS;
|
import com.aliyun.oss.OSSClientBuilder;
|
import com.aliyun.oss.OSSException;
|
import com.aliyun.oss.model.PutObjectRequest;
|
import com.aliyun.oss.model.PutObjectResult;
|
import com.ruoyi.common.core.utils.uuid.IdUtils;
|
import org.springframework.web.multipart.MultipartFile;
|
|
import java.io.ByteArrayInputStream;
|
import java.io.InputStream;
|
import java.util.Calendar;
|
|
/**
|
* @author jqs34
|
* @version 1.0
|
* @classname OBSUploadUtils
|
* @description: TODO
|
* @date 2023 2023/5/1 15:40
|
*/
|
public class OBSUploadUtils {
|
|
|
protected static OSS createOss(){
|
// Endpoint以华东1(杭州)为例,其它Region请按实际情况填写。
|
String endpoint = "https://oss-cn-beijing.aliyuncs.com";
|
// 阿里云账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM用户进行API访问或日常运维,请登录RAM控制台创建RAM用户。
|
String accessKeyId = "LTAI5tAfKFuhyKFH12CTkXFj";
|
String accessKeySecret = "tIBRuonHuQQPdcYrmlCdXlexOSwVXe";
|
// 填写Bucket名称,例如examplebucket。
|
String bucketName = "hongruitang";
|
OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
|
return ossClient;
|
}
|
|
public static String uploadFile (MultipartFile file) throws Exception {
|
|
// 填写Object完整路径,完整路径中不能包含Bucket名称,例如exampledir/exampleobject.txt。
|
String bucketName = "hongruitang";
|
Calendar calendar = Calendar.getInstance();
|
// 获取当前年
|
String year = String.valueOf(calendar.get(Calendar.YEAR));
|
// 获取当前月
|
String month = String.valueOf(calendar.get(Calendar.MONTH) + 1);
|
// 获取当前日
|
String day = String.valueOf(calendar.get(Calendar.DATE));
|
String filePath = year+"/"+month+"/"+day+"/";
|
String uuid = IdUtils.fastSimpleUUID();
|
// 创建OSSClient实例。
|
OSS ossClient = createOss();
|
PutObjectResult result = null;
|
try {
|
|
String fileName = FileUploadUtils.extractFilename(file);
|
String prefix = fileName.substring(fileName.lastIndexOf("."));
|
String objectName = filePath + uuid + prefix;
|
InputStream inputStream = file.getInputStream();
|
// 创建PutObjectRequest对象。
|
PutObjectRequest putObjectRequest = new PutObjectRequest(bucketName, objectName, inputStream);
|
// 设置该属性可以返回response。如果不设置,则返回的response为空。
|
putObjectRequest.setProcess("true");
|
// 创建PutObject请求。
|
result = ossClient.putObject(putObjectRequest);
|
// 如果上传成功,则返回200。
|
System.out.println(result.getResponse().getStatusCode());
|
return result.getResponse().getUri();
|
} catch (OSSException oe) {
|
System.out.println("Caught an OSSException, which means your request made it to OSS, "
|
+ "but was rejected with an error response for some reason.");
|
System.out.println("Error Message:" + oe.getErrorMessage());
|
System.out.println("Error Code:" + oe.getErrorCode());
|
System.out.println("Request ID:" + oe.getRequestId());
|
System.out.println("Host ID:" + oe.getHostId());
|
} catch (ClientException ce) {
|
System.out.println("Caught an ClientException, which means the client encountered "
|
+ "a serious internal problem while trying to communicate with OSS, "
|
+ "such as not being able to access the network.");
|
System.out.println("Error Message:" + ce.getMessage());
|
} finally {
|
if (ossClient != null) {
|
ossClient.shutdown();
|
}
|
}
|
return result.getResponse().getErrorResponseAsString();
|
}
|
|
}
|