亚马逊云储存在java上使用方法

1.写一个配置类

package com.app.framework.config;

import com.amazonaws.ClientConfiguration;
import com.amazonaws.Protocol;
import com.amazonaws.auth.AWSCredentials;
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 org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class AmazonS3Config {

    @Bean
    public AmazonS3 amazonS3Client() {
        //用户名
        String accessKey = "";
        //密码
        String secretKey = "";
        AWSCredentials credentials = new BasicAWSCredentials(accessKey, secretKey);

        AWSStaticCredentialsProvider awsStaticCredentialsProvider = new AWSStaticCredentialsProvider(credentials);
        ClientConfiguration config = new ClientConfiguration();

        String region = "wx-pbc";
        AwsClientBuilder.EndpointConfiguration endpointConfiguration = new AwsClientBuilder.EndpointConfiguration("cos.wx-pbc.cos.tg.unicom.local", region);
        return AmazonS3ClientBuilder.standard()
        .withCredentials(awsStaticCredentialsProvider)
        .withClientConfiguration(config.withProtocol(Protocol.HTTP).withSignerOverride("S3SignerType"))
        .withEndpointConfiguration(endpointConfiguration).build();
    }

}

2.写一个controller接口调用方法存储文件

package com.app.project.welfare.controller;


import cn.hutool.core.lang.UUID;
import com.aliyun.oss.*;
import com.aliyun.oss.model.PutObjectResult;
import com.amazonaws.auth.AWSStaticCredentialsProvider;
import com.amazonaws.auth.BasicAWSCredentials;
import com.amazonaws.services.s3.AmazonS3;
import com.amazonaws.services.s3.AmazonS3ClientBuilder;
import com.amazonaws.services.s3.model.ObjectMetadata;
import com.amazonaws.services.s3.model.PutObjectRequest;
import com.app.framework.web.domain.AjaxResult;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;

import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStream;


@RequestMapping("/oss")
@RestController
@Slf4j
public class OssController {

    /**
     * 把文件上传到自己的服务器,然后在上传到 Amazon s3存储器
     */
    @PostMapping("/upload-img-s3")
    public AjaxResult uploadImgAmazonS3(@RequestParam("file") MultipartFile file) throws IOException {
        log.info("文件上传:{}", file);

        //生成一个随机的UUID(通用唯一标识符)
        UUID uuid = UUID.fastUUID();
        //获取上传文件的原始文件名,并将其存储在变量fileName中
        String fileName = file.getOriginalFilename();
        //使用断言确保fileName不为空,如果为空则抛出异常
        assert fileName != null;
        //将文件名按照点号(".")分割成一个字符串数组
        String[] fileNameSplit = fileName.split("\\.");
        //将UUID和原始文件名中的扩展名重新拼接起来,形成新的文件名
        fileName = uuid + "." + fileNameSplit[1];
        //创建一个新的ObjectMetadata对象
        ObjectMetadata objectMetadata = new ObjectMetadata();
        //获取上传文件的输入流,并使用available()方法来获取该流中可用的字节数
        objectMetadata.setContentLength(file.getInputStream().available());
        //获取上传文件的内容类型(MIME类型)
        String contentType = file.getContentType();
        //将获取到的文件内容类型设置为新文件的元数据内容类型
        objectMetadata.setContentType(contentType);
        // 设置公共读
        objectMetadata.setHeader("x-amz-acl", "public-read");
        //拼接
        String finalFileName = "name/" + fileName;
        //将文件上传到名为"name"的S3存储桶中
        amazonS3.putObject("name", finalFileName, file.getInputStream(), objectMetadata);
        String imgUrl = "https://xxx" + finalFileName;
        return AjaxResult.success(imgUrl);
    }
}

这样,当前端调用后端的controller接口,就可以上传文件到亚马逊oss储存地址了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值