xuekang
2024-05-11 bac0878349a1db23e7b420ea164e22fb9db73a99
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
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();
    }
 
}