IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> 【一文包会】Springboot快速实现阿里云OSS文件上传功能 -> 正文阅读

[Java知识库]【一文包会】Springboot快速实现阿里云OSS文件上传功能

??写在前面


  • 这里是温文艾尔の学习之路
  • 👍如果对你有帮助,给博主一个免费的点赞以示鼓励把QAQ
  • 👋博客主页🎉 温文艾尔の学习小屋
  • ??更多文章👨?🎓请关注温文艾尔主页📝
  • 🍅文章发布日期:2021.12.29
  • 👋java学习之路!
  • 欢迎各位🔎点赞👍评论收藏??
  • 🎄新年快乐朋友们🎄
  • 👋jvm学习之路!
  • ??上一篇内容:【JVM】JVM03(图解垃圾回收机制)上


在这里插入图片描述

??起因

起因:在遇到上传下载图片以及其他资源问题的时候,我选择的是将图片上传到我自己的云服务器上,按时间图片类型分好类,这样可以对图片进行正常的管理,但是代价来了,服务器内存太小(我的是学生机),如果这么操作下去服务器会”不堪其重“,故我选择了一种替代方案<使用阿里云对象存储OSS服务>来对这些资源进行管理

阿里云OSS是一种很好的针对存储的解决方案,在实际开发中也有许多公司使用该服务

??1.开通“对象存储OSS”服务

阿里云官网

1.1申请阿里云账号
1.2实名认证
1.3开通“对象存储OSS”服务

前两步比较简单,是注册与实名认证,我们直接略过进行第三步开通服务

在这里插入图片描述
在这里插入图片描述
如果我们存储量比较小,在1GB之下是不收费的,不过最好还是往阿里云存个一两块钱以防不测

我们进入管理控制台,创建Bucket
在这里插入图片描述
在这里插入图片描述
地域默认选择即可,地域的选择会影响下面的地域节点Endpoint
在这里插入图片描述
存储类型

  • 标准存储:文件频繁被访问
  • 低频访问存储:文件访问频率低
  • 归档存储:文件基本不访问,只做存储

这里根据存储的文件风格进行选择
在这里插入图片描述
启用同城冗余存储代表在此区域的文件将会备份,开通同城冗余存储会收费
在这里插入图片描述
读写权限

  • 私有:只有自己能访问文件
  • 公共读:任何人都能访问你的文件
  • 公共读写:其他人不仅能访问,还可以对你的文件进行操作

选择公共读即可
在这里插入图片描述
服务器加密方式和实时日志查询选择<无>和<不开通>即可
在这里插入图片描述
我们可以在Bucket列表中刚查看已创建的Bucket信息
在这里插入图片描述
我们使用控制台上传一张图片试一下
在这里插入图片描述
在这里插入图片描述
上传成功oss会帮我们生成访问地址,可以对图片进行下载
在这里插入图片描述

??2.通过代码操作阿里云OSS

??2.1.创建操作阿里云oss许可证

只有拿到了阿里云颁发id和秘钥我们才可以继续操作
在这里插入图片描述
在这里插入图片描述
进行验证即可获得,获得之后最好保存一下,如果遗忘的话再寻找秘钥又会需要验证很麻烦

??2.2代码操作

阿里云开发文档

项目基本结构
在这里插入图片描述
新建springboot工程引入依赖

<dependencies>
    <!-- 阿里云oss依赖 -->
    <dependency>
        <groupId>com.aliyun.oss</groupId>
        <artifactId>aliyun-sdk-oss</artifactId>
        <version>3.10.2</version>
    </dependency>

    <!-- 日期工具栏依赖 -->
    <dependency>
        <groupId>joda-time</groupId>
        <artifactId>joda-time</artifactId>
        <version>2.10.1</version>
    </dependency>
</dependencies>

application.properties

#服务端口
server.port=8002
#服务名
spring.application.name=service-oss
#环境设置:dev、test、prod
spring.profiles.active=dev
#阿里云 OSS
#不同的服务器,地址不同
aliyun.oss.file.endpoint=oss-cn-beijing.aliyuncs.com
aliyun.oss.file.keyid=your accessKeyId
aliyun.oss.file.keysecret=your accessKeySecret
#bucket
aliyun.oss.file.bucketname=wenwenaier-file

工具类ConstantPropertiesUtils:读取配置文件中的内容

package com.wql.oss.utils;

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

/**
 * Description
 * User:
 * Date:
 * Time:
 */
@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;

    public static String END_POINT;
    public static String ACCESS_KEY_ID;
    public static String ACCESS_KEY_SECRET;
    public static String BUCKET_NAME;




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

OssController

package com.wql.oss.controller;

import com.wql.commonutils.RespBean;
import com.wql.oss.service.OssService;
import org.springframework.beans.factory.annotation.Autowired;
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;

/**
 * Description
 * User:
 * Date:
 * Time:
 */
@RestController
@RequestMapping("/eduoss/fileoss")
public class OssController {

    @Autowired
    private OssService ossService;

    //上传图片
    @PostMapping("/upload")
    public RespBean uploadOssFile(MultipartFile file){
        //返回上传到oss的路径
        String url = ossService.uploadFileAvatar(file);
        return RespBean.ok().data("url",url);
    }
}

OssService

package com.wql.oss.service;

import org.springframework.web.multipart.MultipartFile;

/**
 * Description
 * User:
 * Date:
 * Time:
 */
public interface OssService {
    String uploadFileAvatar(MultipartFile file);
}

OssServiceImpl

package com.wql.oss.service.impl;

import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder;
import com.aliyun.oss.model.ObjectMetadata;
import com.wql.oss.service.OssService;
import com.wql.oss.utils.ConstantPropertiesUtils;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;

import java.io.FileInputStream;
import java.io.InputStream;
import java.text.SimpleDateFormat;
import java.util.Date;

/**
 * Description
 * User:
 * Date:
 * Time:
 */

@Service
public class OssServiceImpl implements OssService {



    /**
     * 上传文件到oss
     * @param file
     * @return
     */
    @Override
    public String uploadFileAvatar(MultipartFile file) {
        // yourEndpoint填写Bucket所在地域对应的Endpoint。以华东1(杭州)为例,Endpoint填写为https://oss-cn-hangzhou.aliyuncs.com。
        String endpoint = ConstantPropertiesUtils.END_POINT;
        // 阿里云账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM用户进行API访问或日常运维,请登录RAM控制台创建RAM用户。
        String accessKeyId = ConstantPropertiesUtils.ACCESS_KEY_ID;
        String accessKeySecret = ConstantPropertiesUtils.ACCESS_KEY_SECRET;
        String bucketName = ConstantPropertiesUtils.BUCKET_NAME;
        OSS ossClient = null;
        String url = "";
        try {
            // 创建OSSClient实例。
            ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
            // 获得文件输入流
            InputStream inputStream = file.getInputStream();
            /**
             * 第一个参数 Bucket名称
             * 第二个参数 上传到oss中文件的路径及名称
             * 第三个参数 上传文件输入流
             */
            //构建文件路径
            String fileDatePath = new SimpleDateFormat("yyyy-MM-dd").format(new Date());
            String fileName = file.getOriginalFilename();
            String filePath = fileDatePath+"/"+fileName;

            ObjectMetadata meta = new ObjectMetadata();
            meta.setContentType("image/jpg");

            ossClient.putObject(bucketName, filePath, inputStream,meta);

            //拼接路径
            url = "https://"+bucketName+"."+endpoint+"/"+filePath;
            return url;
        }catch (Exception e){
            e.printStackTrace();
            return null;
        }finally {
            // 关闭OSSClient。
            ossClient.shutdown();
        }
    }
}

我们利用swagger做一下测试
在这里插入图片描述
打开返回的链接

https://wenwenaier-file.oss-cn-beijing.aliyuncs.com/2022-01-27/圣诞.jpg
在这里插入图片描述
上传成功!
在这里插入图片描述
在这里插入图片描述

  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2022-01-29 22:56:58  更:2022-01-29 22:57:34 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 9:50:29-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码