JAVA通过阿里云OSS存储实现图片上传功能

这篇具有很好参考价值的文章主要介绍了JAVA通过阿里云OSS存储实现图片上传功能。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、前置准备

首先我们需要在阿里云注册账号,实名认证后开通OSS功能,点击进入OSS功能的管理平台

进入概览页面后,点击Bucket列表,创建一个Bucket(相当于一个存放文件的文件夹)

 关键是要获得下面几个关键的信息,只有拥有这些信息才能连接上这个Bucket进行操作:

endpoint:使用不同地方的服务器地址也不同
keyid:相当于登录账号,点击可自动导出你的id与sercret
keysecret:一长串的随机密钥供登录使用
bucketname:创建的BucketName名称

二、开始操作

添加对应依赖

        <!--   阿里云oss依赖     -->
        <dependency>
            <groupId>com.aliyun.oss</groupId>
            <artifactId>aliyun-sdk-oss</artifactId>
        </dependency>
        <!--  日期工具栏依赖  -->
        <dependency>
            <groupId>joda-time</groupId>
            <artifactId>joda-time</artifactId>
        </dependency>

     1、 首先我们创建一个配置文件,里面保存一些常规配置以及上面我们得到的关于oss的配置信息

# application.properties

#服务端口
server.port=8002
#服务名
spring.application.name=service-oss

#环境设置:dev、test、prod
spring.profiles.active=dev

#阿里云 OSS
#不同的服务器,地址不同
aliyun.oss.file.endpoint=<!--endpoint-->
aliyun.oss.file.keyid=<!--keyid-->
aliyun.oss.file.keysecret=<!--keysecret-->
#bucket可以在控制台创建,也可以使用java代码创建
aliyun.oss.file.bucketname=<!--bucketname-->

也可以使用yml文件

# application.yml

# 服务端口号
server:
  port: 8002

spring:
  # 服务名
  application:
    name: service-oss
  # 环境设置:dev、test、prod
  profiles:
    active: dev

# 阿里云OSS
# 不同服务器地址不同
aliyun:
  oss:
    file:
      endpoint: <!--endpoint-->
      keyid: <!--keyid-->
      keysecret: <!--keysecret-->
      bucketname: <!--bucketname-->

        2、创建一个工具类将配置文件中要使用的信息提取出来,解耦合

package com.xxx.oss.utils;

import org.springframework.beans.factory.InitializingBean;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;

/**
 * Created by 令狐冲 on 2022/9/9 16:04
 */

// 项目启动时 spring加载 实现一个接口执行接口一个方法
@Component
public class ConstantPropertiesUtils implements InitializingBean {
    // 读取配置文件中的内容
    @Value("${aliyun.oss.file.endpoint}")
    private String endpoint;
    @Value("${aliyun.oss.file.keyid}")
    private String keyId;
    @Value("${aliyun.oss.file.keysecret}")
    private String keySecret;
    @Value("${aliyun.oss.file.bucketname}")
    private String bucketName;

    // 在spring生命周期中 实例化->生成对象->属性填充后会进行afterPropertiesSet方法
    // 定义空开常用变量
    public static String END_POINT;
    public static String KEY_ID;
    public static String KEY_SECRET;
    public static String BUCKET_NAME;

    @Override
    public void afterPropertiesSet() throws Exception {
        END_POINT = endpoint;
        KEY_ID = keyId;
        KEY_SECRET = keySecret;
        BUCKET_NAME = bucketName;
    }
}

        3、编写service实现层实例化oss进行操作

package com.xxx.oss.service.impl;

import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder;
import com.aliyun.oss.model.GeneratePresignedUrlRequest;
import com.leader.oss.service.OssService;
import com.leader.oss.utils.ConstantPropertiesUtils;
import org.joda.time.DateTime;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;

import java.io.IOException;
import java.io.InputStream;
import java.util.UUID;

/**
 * Created by 令狐冲 on 2022/9/9 16:25
 */
@Service
public class OssServiceImpl implements OssService {

    // 上传头像到oss
    @Override
    public String uploadFileAvatar(MultipartFile file) {
        // 从工具类中获取对象
        String endpoint = ConstantPropertiesUtils.END_POINT;
        String accessKeyId = ConstantPropertiesUtils.KEY_ID;
        String accessKeySecret = ConstantPropertiesUtils.KEY_SECRET;
        String bucketName = ConstantPropertiesUtils.BUCKET_NAME;

        try {
            // 创建OSS实例
            OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
            // 获取上传文件的输入流
            InputStream inputStream = file.getInputStream();
            // 获取文件原始名称
            String filename = file.getOriginalFilename();
            // 完善1、 --> 在文件名中添加唯一值
            String uuid = UUID.randomUUID().toString().replace("-", "");
            filename = uuid + filename;
            // 完善2、 --> 把文件按照日期分类
            String datePath = new DateTime().toString("yyyy/MM/dd");
            // 拼接时间 yyyy/MM/dd/filename
            filename = datePath + "/" + filename;
            //System.out.println(filename);
            // 调用oss方法实现上传
            // 1、bucketName 2、上传到oss文件路径和文件名称 3、文件的输入流
            ossClient.putObject(bucketName, filename, inputStream);
            // 获取url地址(根据阿里云oss中的图片实例拼接字符串) 拼接url字符串
            // https://edu-leader.oss-cn-beijing.aliyuncs.com/%E4%BB%96.jpg
            String url = "https://"+bucketName+"."+endpoint+"/"+filename;
            // 关闭oss
            ossClient.shutdown();
            return url;
        } catch (IOException e) {
            e.printStackTrace();
            return null;
        }
    }
}

        4、在控制层设置RequestMappint,通过swagger测试接口

package com.xxx.oss.controller;

import com.leader.commonutils.R;
import com.leader.oss.service.OssService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.CrossOrigin;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;

/**
 * Created by 令狐冲 on 2022/9/9 16:26
 */
@RestController
@RequestMapping("/oss/fileoss")
@CrossOrigin
public class OssController {

    @Autowired
    private OssService ossService;

    //上传头像的方法
    @PostMapping
    public R uploadOssFile(MultipartFile file){
        // MultipartFile -> 获取上传文件
        // 返回上传到oss的路径
        String url = ossService.uploadFileAvatar(file);
        return R.success().data("url",url);
    }

}

测试成功🙆‍♂️文章来源地址https://www.toymoban.com/news/detail-454885.html

到了这里,关于JAVA通过阿里云OSS存储实现图片上传功能的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包