集成aws-s3亚马逊对象存储

对象存储OSS(Object Storage Service)是一款海量、安全、低成本、高可靠的云存储服务,提供99.99%的数据持久性,99.99%的数据可用性。可用于存储任意类型,任意数量,任意大小的非结构化数据。

Spingboot集成亚马逊 AmazonS3的使用
1、引入pom依赖
<!-- aws对象存储 -->
<dependency>
    <groupId>com.amazonaws</groupId>
    <artifactId>aws-java-sdk-s3</artifactId>
    <version>1.11.490</version>
</dependency>
2、yml配置

在这里插入图片描述

3、初始化AmazonS3
@Component
@Slf4j
public class AwsS3Component implements InitializingBean {

    @Value("${aws.accessKey}")
    private String accessKey;
    @Value("${aws.secretKey}")
    private String accessSecret;
    @Value("${aws.bucket}")
    private String bucket;
    @Value("${aws.endpoint}")
    private String endpoint;
    private AmazonS3 client;

    @Override
    public void afterPropertiesSet() {
        ClientConfiguration config = new ClientConfiguration();
        config.setProtocol(Protocol.HTTP);
        config.disableSocketProxy();
        this.client = AmazonS3ClientBuilder
        .standard()
        .withClientConfiguration(config)
        .withCredentials(new AWSStaticCredentialsProvider(new BasicAWSCredentials(accessKey, accessSecret)))
        .withEndpointConfiguration(new AwsClientBuilder.EndpointConfiguration(endpoint, Regions.CN_NORTH_1.getName()))
        .enablePathStyleAccess()
        .build();
    }

    /**
     * 执行文件上传
     *
     * @param file 要上传的文件的路径
     * @param key  存储文件的路径
     * @return 文件路径
     */
    public String upload(File file, String key) {
        client.putObject(new PutObjectRequest(bucket, key, file).withCannedAcl(CannedAccessControlList.PublicRead));
        GeneratePresignedUrlRequest urlRequest = new GeneratePresignedUrlRequest(bucket, key);
        URL url = client.generatePresignedUrl(urlRequest);
        return url.toString();
    }

    /**
     * 文件流执行文件上传
     * @param input
     * @param key
     * @return
     * @throws IOException
     */
    public String upload(InputStream input, String key) throws IOException {
        Date expireDate = new Date(System.currentTimeMillis() + TimeUnit.DAYS.toMillis(30));
        ObjectMetadata metadata = new ObjectMetadata();
        metadata.setHttpExpiresDate(expireDate);
        metadata.setContentLength(input.available());
        client.putObject(new PutObjectRequest(bucket, key, input, metadata).withCannedAcl(CannedAccessControlList.PublicRead));
        GeneratePresignedUrlRequest urlRequest = new GeneratePresignedUrlRequest(bucket, key);
        URL url = client.generatePresignedUrl(urlRequest);
        return url.toString();

    }
4、文件上传实现类
@SneakyThrows
@Override
public ResultDTO awsUpload(MultipartFile file) {
    //空文件限制
    if(file.isEmpty()){
        return ResultDTO.response("上传文件不能为空!");
    }
    //文件大小限制,最大单文件20M
    if(file.getSize() > fileSize){
        return ResultDTO.response("上传文件大小超过50M!");
    }
    //获取文件md5值
    String fileMd5 = fileMd5Util.getFileMd5Value(file);
    String fileName = file.getOriginalFilename();
    String prefix = fileName.substring(fileName.lastIndexOf(".") + 1);
    StringBuffer tempFileName = new StringBuffer(fileMd5);
    tempFileName.append(".").append(prefix);
    String localFileName = tempFileName.toString();
    String upload = awsS3Component.upload(file.getInputStream(), localFileName);
    log.info("文件---[{}]---上传到S3服务器成功!",localFileName);
    //文件访问路径
    String url = endpoint + "/"+ bucket + "/" + localFileName;
    return ResultDTO.requestSuccess(url);
}
5、控制器Controller
@PostMapping(value = "/uploadObjectOSS",produces = {MediaType.APPLICATION_JSON_UTF8_VALUE},consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
public ResultDTO uploadObjectOSS(@ApiParam("文件") @RequestPart("file") MultipartFile file) @RequestParam("type") Integer type) throws IOException {
    return ossService.awsUpload(file);
}
6、获取文件md5值工具类
@Slf4j
@Component
public class FileMd5Util {
    /**
     * 文件md5值
     * @param multipartFile
     * @return
     */
    public String getFileMd5Value(MultipartFile multipartFile) {
        InputStream in = null;
        try {
            in = multipartFile.getInputStream();
            byte[] buffer = new byte[2048];
            MessageDigest digest = MessageDigest.getInstance("MD5");
            while (true) {
                int len = in.read(buffer, 0, 2048);
                if (len != -1) {
                    digest.update(buffer, 0, len);
                } else {
                    break;
                }
            }
            in.close();
            byte[] md5Bytes = digest.digest();
            StringBuffer hexValue = new StringBuffer();
            for (int i = 0; i < md5Bytes.length; i++) {
                int val = ((int) md5Bytes[i]) & 0xff;
                if (val < 16) {
                    hexValue.append("0");
                }
                hexValue.append(Integer.toHexString(val));
            }
            return hexValue.toString();
        } catch (Exception e) {
            log.error("获取文件md5失败");
        } finally {
            try {
                in.close();

            } catch (IOException ex) {
                log.error("关闭流异常", ex);
            }
        }
        return null;
    }

}

在这里插入图片描述

s3browser客户端快捷方便管理上传之后的文件和文件目录存储结构
1、进入下载页面进行下载

https://s3browser.com/

2、使用客户端进行连接公司亚马逊服务

在这里插入图片描述

3、连接成功界面如下

在这里插入图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在Spring Boot项目中集成AWS SDK,可以实现与AWS S3的连接并实现文件的上传和下载功能。 首先,需要在pom.xml文件中添加AWS SDK的依赖项,并确保version保持一致。在dependencyManagement中添加以下代码: ``` <dependencyManagement> <dependencies> <dependency> <groupId>software.amazon.awssdk</groupId> <artifactId>bom</artifactId> <version>2.0.0-preview-12</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> ``` 然后,在dependencies中添加以下代码: ``` <dependency> <groupId>software.amazon.awssdk</groupId> <artifactId>s3</artifactId> <version>2.0.0-preview-12</version> </dependency> ``` 接下来,在application.properties文件中进行配置,包括AWS的访问密钥、S3存储桶名称、存储桶所在地区以及上传文件的路径: ``` aws.access_key_id=your access key aws.secret_access_key=your secret access key aws.s3.bucket=your bucket name aws.s3.region=cn-northwest-1 aws.s3.filename=/666666/test123/photo.zip ``` 在文件上传和下载的方法中,需要注意传递给方法的key参数是指存储在AWS S3上的文件名。如果key参数是路径字符串格式,S3服务器会自动创建对应路径的文件夹。例如,如果在application.properties中设置了aws.s3.filename=/666666/test123/photo.zip,那么key参数为/666666/test123/photo.zip,S3存储桶下就会有一个名为/666666/test123/photo.zip的文件,即上传的文件。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [Spring Boot项目集成AWS SDK连接到AWS S3,实现上传下载功能](https://blog.csdn.net/sinat_27428951/article/details/89675587)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值