package com.nuvole.util.oss;
|
|
import com.amazonaws.AmazonServiceException;
|
import com.amazonaws.SdkClientException;
|
import com.amazonaws.auth.AWSCredentialsProvider;
|
import com.amazonaws.auth.AWSStaticCredentialsProvider;
|
import com.amazonaws.auth.BasicAWSCredentials;
|
import com.amazonaws.client.builder.AwsClientBuilder;
|
import com.amazonaws.services.s3.AmazonS3;
|
import com.amazonaws.services.s3.AmazonS3ClientBuilder;
|
import com.amazonaws.services.s3.model.GeneratePresignedUrlRequest;
|
import com.amazonaws.services.s3.model.PutObjectResult;
|
import com.amazonaws.services.s3.model.ResponseHeaderOverrides;
|
|
import java.io.ByteArrayInputStream;
|
import java.io.File;
|
import java.io.InputStream;
|
import java.net.URL;
|
import java.time.Instant;
|
import java.util.Date;
|
|
public class YiDongOss {
|
// 填写要上传到的存储桶名称,例如'example-bucket'。
|
private static final String bucketName = "ecosphere";
|
// 填写存储桶(Bucket)所在地域对应的 endpoint 和 Region。
|
private static final String endpoint = "https://eos.zhengzhou-4.cmecloud.cn";
|
private static final String region = "zhengzhou4";
|
// 填写 EOS 账号的认证信息,或者子账号的认证信息。
|
private static final String accessKey = "1PMC6XN2QVDEN6M6IWQB";
|
private static final String secretKey = "tfbfDxHZGUIl7s3kb2fJyHCLtpZLydbzEhlTRmIy";
|
private static AmazonS3 client = null;
|
|
static {
|
// 创建 AmazonS3 实例。
|
AwsClientBuilder.EndpointConfiguration endpointConfiguration = new AwsClientBuilder.EndpointConfiguration(endpoint, region);
|
BasicAWSCredentials credentials = new BasicAWSCredentials(accessKey, secretKey);
|
AWSCredentialsProvider credentialsProvider = new AWSStaticCredentialsProvider(credentials);
|
client = AmazonS3ClientBuilder.standard()
|
.withEndpointConfiguration(endpointConfiguration)
|
.withCredentials(credentialsProvider).build();
|
}
|
|
|
public static void main(String[] args) throws Exception {
|
try {
|
String filePath = "C:\\Users\\cy\\Pictures\\铁窗泪.jpg";
|
File uploadFile = new File(filePath);
|
String fileName = uploadFile.getName();
|
String foldName = "2023/12/19/";
|
// mkdirFolder(client, bucketName,foldName);
|
// uploadFile(client, bucketName, foldName + fileName, new FileInputStream(uploadFile));
|
String shareUrl = getShareUrl(foldName + fileName);
|
} catch (AmazonServiceException e) {
|
// 上传失败。
|
// System.out.println("发生异常 AmazonServiceException,通常原因是请求内容错误。");
|
System.out.println("Error Code: " + e.getErrorCode());
|
} catch (SdkClientException e) {
|
System.out.println("Error Message: " + e.getMessage());
|
} finally {
|
if (client != null) {
|
client.shutdown();
|
}
|
}
|
}
|
|
// 上传文件。
|
public static String upload(String fileName, InputStream inputStream, String targetPath) {
|
String objectName = targetPath + "/" + fileName;
|
mkdirFolder(targetPath);
|
PutObjectResult putObjectResult = client.putObject(bucketName, objectName, inputStream, null);
|
if (putObjectResult == null) {
|
return null;
|
}
|
try {
|
return getShareUrl(objectName);
|
} catch (Exception e) {
|
e.printStackTrace();
|
}
|
return null;
|
}
|
|
/**
|
* 创建文件夹
|
*
|
* @return
|
*/
|
private static boolean mkdirFolder(String directory) {
|
PutObjectResult putObjectResult = client.putObject(bucketName, directory, new ByteArrayInputStream(new byte[0]), null);
|
return putObjectResult != null;
|
}
|
|
/**
|
* 获取对象的分享链接
|
*
|
* @param objectName
|
* @return
|
*/
|
public static String getShareUrl(String objectName) throws Exception {
|
// 生成可预览的外链。
|
GeneratePresignedUrlRequest request =
|
new GeneratePresignedUrlRequest(bucketName, objectName);
|
|
// 设置过期时间,当到达该时间点时,URL 就会过期,其他人不再能访问该对象(Object)。
|
Date expiration = new Date();
|
// SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
|
// expiration = simpleDateFormat.parse("2024/12/20 23:59:59");
|
// 设置 7 天后过期。
|
long expTimeMillis = Instant.now().toEpochMilli();
|
expTimeMillis += 1000 * 60 * 60 * 24 * 7;
|
expiration.setTime(expTimeMillis);
|
|
request.setExpiration(expiration);
|
|
// 设置返回头
|
// 设置为 "inline" 时在浏览器中展示,设置为 "attachment" 时以文件形式下载。
|
// 此外设置为 "attachment;filename=\"filename.jpg\"" ,还可以让下载的文件名字重命名为 "filename.jpg"。
|
ResponseHeaderOverrides headerOverrides = new ResponseHeaderOverrides();
|
headerOverrides.setContentDisposition("inline");
|
request.setResponseHeaders(headerOverrides);
|
|
URL url = client.generatePresignedUrl(request);
|
System.out.println(url);
|
return url.toString();
|
}
|
|
}
|