Spring boot2.x使用阿里云 OSS对象存储


image.png



image.png


创建好bucket 开启跨域

image.png

image.png


image.png


image.png


image.png

添加好用户一定要记好 accessKeyID 和 accessKeySecret

image.png



添加完毕就进入拷贝代码模式

maven地址

<!-- oss -->
<dependency>
    <groupId>com.aliyun.oss</groupId>
    <artifactId>aliyun-sdk-oss</artifactId>
    <version>3.8.0</version>
</dependency>


application.yml

aliyun:
  oss:
    bucketName: #此处填你自己创建oss的bucketName
    accessKeyId: #此处填你自己创建子用户的的accessKeyId
    accessKeySecret: #此处填你自己创建子用户的的accessKeySecret
    #OSS对应的区域
    endpoint: http://oss-cn-shanghai.aliyuncs.com
    #自定义的bucketName下的目录
    filehost: imgs

新建配置文件 OssConfiguration.java

/**
 * 把配置文件中的配置信息读取到该类中.
 */
@Data //lombok
@Configuration
public class OssConfiguration {

    @Value("${aliyun.oss.endpoint}")
    private String endPoint;

    @Value("${aliyun.oss.accessKeyId}")
    private String accessKeyId;

    @Value("${aliyun.oss.accessKeySecret}")
    private String accessKeySecret;

    @Value("${aliyun.oss.filehost}")
    private String fileHost;

    @Value("${aliyun.oss.bucketName}")
    private String bucketName;
    
    //省略getter setter方法 或者用lombok
}

新建AliyunOssUtil工具类

@Component
public class AliyunOssUtil {

    @Autowired
    private OssConfiguration config;


    public String upload(File file) {
        if (file == null) {
            return null;
        }

        String endPoint = config.getEndPoint();
        String keyId = config.getAccessKeyId();
        String keySecret = config.getAccessKeySecret();
        String bucketName = config.getBucketName();
        String fileHost = config.getFileHost();

        //定义子文件的格式
        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
        String dateStr = format.format(new Date());

        //阿里云文件上传客户端
        OSSClient client = new OSSClient(endPoint, keyId, keySecret);

        try {
            //判断桶是否存在
            if (!client.doesBucketExist(bucketName)) {
                //创建桶
                client.createBucket(bucketName);
                CreateBucketRequest createBucketRequest = new CreateBucketRequest(bucketName);
                //设置访问权限为公共读
                createBucketRequest.setCannedACL(CannedAccessControlList.PublicRead);
                //发起创建桶的请求
                client.createBucket(createBucketRequest);
            }

            //当桶存在时,进行文件上传
            //设置文件路径和名称
            String fileUrl = fileHost + "/" + (dateStr + "/" + UUID.randomUUID().toString().replace("-", "") + "-" + file.getName());
            PutObjectResult result = client.putObject(new PutObjectRequest(bucketName, fileUrl, file));
            client.setBucketAcl(bucketName, CannedAccessControlList.PublicRead);

            //文件上传成功后,返回当前文件的路径
            if (result != null) {
                return fileUrl;
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            if (client != null) {
                client.shutdown();
            }
        }

        return null;
    }

}


新建OssController

@Slf4j
@Api(value = "OssController")
@RestController
@RequestMapping("media")
public class OssController {


    @Autowired
    private AliyunOssUtil ossUtil;

//    @ApiOperation(value = "上传图片,返回地址路径")
//    @ApiImplicitParams({
//            @ApiImplicitParam(name = "uploadFile", value = "图片文件", required = false, dataType = "Integer"),
//    })
    @PostMapping("OssUploadFile")
    public Object OssUploadFile(@RequestParam("file") MultipartFile file) {
        String url ="https://shiguangyimeiimgs.oss-cn-shanghai.aliyuncs.com/";
        try {
            if (file != null) {
                String fileName = file.getOriginalFilename();
                if (!"".equals(fileName.trim())) {
                    File newFile = new File(fileName);

                    FileOutputStream os = new FileOutputStream(newFile);
                    os.write(file.getBytes());
                    os.close();

                    //把file里的内容复制到奥newFile中
                    file.transferTo(newFile);
                    String upload = ossUtil.upload(newFile);

                    //图片回显地址:
                    log.info("url = "+url+ upload);
                    return url+ upload;
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
            return "上传失败";
        }

        return "上传失败";
    }

}


image.png


image.png

image.png



发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。