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(); } }