侧边栏壁纸
  • 累计撰写 24 篇文章
  • 累计创建 11 个标签
  • 累计收到 0 条评论

目 录CONTENT

文章目录

阿里云对象存储Oss

阿杰
2022-06-02 / 0 评论 / 0 点赞 / 202 阅读 / 1,590 字

💍 阿里云对象存储Oss介绍


阿里云对象存储服务(Object Storage Service,简称OSS),是阿里云对外提供的海量、安全、低成本、高可靠的云存储服务。您可以通过本文档提供的简单的REST接口,在任何时间、任何地点、任何互联网设备上进行上传和下载数据。基于OSS,您可以搭建出各种多媒体分享网站、网盘、个人和企业数据备份等基于大规模数据的服务。


使用限制

您使用的OSS资源和相关功能,都有一定的限制,具体请参见OSS使用限制

使用说明

OSS API参考主要介绍接口的请求语法、相关参数含义以及请求和返回示例。如果要进行快速二次开发,建议您使用SDK开发包。关于SDK的安装和使用,请参见OSS SDK参考

错误码

请参见OSS常见错误响应

💍 资源术语

中文 英文 说明
存储空间 Bucket 存储空间是您用于存储对象(Object)的容器,所有的对象都必须隶属于某个存储空间。
对象/文件 Object 对象是 OSS 存储数据的基本单元,也被称为OSS的文件。对象由元信息(Object Meta)、用户数据(Data)和文件名(Key)组成。对象由存储空间内部唯一的Key来标识。
地域 Region 地域表示 OSS 的数据中心所在物理位置。您可以根据费用、请求来源等综合选择数据存储的地域。详情请查看OSS已经开通的Region
访问域名 Endpoint Endpoint 表示OSS对外服务的访问域名。OSS以HTTP RESTful API的形式对外提供服务,当访问不同地域的时候,需要不同的域名。通过内网和外网访问同一个地域所需要的域名也是不同的。具体的内容请参见各个Region对应的Endpoint
访问密钥 AccessKey AccessKey,简称 AK,指的是访问身份验证中用到的AccessKeyId 和AccessKeySecret。OSS通过使用AccessKeyId 和AccessKeySecret对称加密的方法来验证某个请求的发送者身份。AccessKeyId用于标识用户,AccessKeySecret是用户用于加密签名字符串和OSS用来验证签名字符串的密钥,其中AccessKeySecret 必须保密。

💍 我们以[Java]实现oss文件上传

我们先创建一个包名(service)


package com.ahjie.oss.service;

import org.springframework.web.multipart.MultipartFile;

/**
 * @ProjectName: ahjie_parent
 * @Package: com.ahjie.oss.service
 * @ClassName: OssService
 * @Author: 码 坑
 * @Description: OssService
 * @Date: 2021/5/10 16:51
 * @Version: 1.0
 */
public interface OssService {

    //上传头像到oss
    String uploadFileAvatar(MultipartFile file);
}

在从service包创建一个文件(impl)


package com.ahjie.oss.service.impl;

import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder;
import com.ahjie.oss.service.OssService;
import com.ahjie.oss.utlis.ConstantPropertiesUtils;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;

import java.io.InputStream;

/**
 * @ProjectName: ahjie_parent
 * @Package: com.ahjie.oss.service.impl
 * @ClassName: OssServiceImpl
 * @Author: 码 坑
 * @Description: OssServiceImpl
 * @Date: 2021/5/10 16:53
 * @Version: 1.0
 */
@Service
public class OssServiceImpl implements OssService {

    //上传头像到oss
    @Override
    public String uploadFileAvatar(MultipartFile file) {

        // 通过工具类获取值 ConstantPropertiesUtils
        String endpoint = ConstantPropertiesUtils.END_POIND;
        // 阿里云账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM用户进行API访问或日常运维,请登录RAM控制台创建RAM用户。
        String accessKeyId = ConstantPropertiesUtils.ACCESS_KEY_ID;
        String accessKeySecret = ConstantPropertiesUtils.ACCESS_KEY_SECRET;
        String bucketName = ConstantPropertiesUtils.BUCKET_NAME;

        try {
            // 创建OSSClient实例。
            OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);

            // 获取文件上传的输入流
            InputStream inputStream = file.getInputStream();

            //获取文件名称
            String filename = file.getOriginalFilename();
            // 调用oss方法实现文件上传
            //第一个参数 Bucket名称
            //第二个参数 上传到oss文件路径和文件名称
            //第三个参数 上传文件输入流
            ossClient.putObject(bucketName, filename, inputStream);
            // 关闭OSSClient。
            ossClient.shutdown();

            //把上传的之后路径返回
            //需要把文件上传到阿里云oss路径手动拼接出来
            String url = "https://" + bucketName + "." + endpoint + "/" + filename;
            return url;
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }

    }
}

💍 然后再创建一个(controller)包名

在controller下创建一个类即可


package com.ahjie.oss.controller;

import com.atguigu.oss.service.OssService;
import com.atguigu.utils.commutils.R;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
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;

/**
 * @ProjectName: ahjie_parent
 * @Package: com.ahjie.oss.controller
 * @ClassName: OssController
 * @Author: 码 坑
 * @Description: OssController
 * @Date: 2021/5/10 16:50
 * @Version: 1.0
 */
@Api(description = "Oss文件上传")
@RestController
@RequestMapping("/eduoss/fileoss")
@CrossOrigin //防止调用跨越
public class OssController {

    @Autowired
    private OssService ossService;

    //上传文件方法
    @PostMapping
    @ApiOperation(value = "文件上传")
    public R uploadoss(MultipartFile file) {
        //获取上传文件 MultipartFile
        //返回上传阿里oss的文件路径
        String url = ossService.uploadFileAvatar(file);
        return R.ok().data("url", url);
    }
}

💍 配置文件(application.properties)


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

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

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

💍 工具类(utils)

package com.ahjie.oss.utlis;

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

/**
 * @ProjectName: ahjie_parent
 * @Package: com.ahjie.oss.utlis
 * @ClassName: ConstantPropertiesUtils
 * @Author: 码 坑
 * @Description: ConstantPropertiesUtils
 * @Date: 2021/5/10 14:45
 * @Version: 1.0
 */
@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_POIND;

    public static String ACCESS_KEY_ID;

    public static String ACCESS_KEY_SECRET;

    public static String BUCKET_NAME;


    @Override
    public void afterPropertiesSet() throws Exception {
        END_POIND = endpoint;

        ACCESS_KEY_ID = keyId;

        ACCESS_KEY_SECRET = keySecret;

        BUCKET_NAME = bucketName;
    }
}

以上内容以Java实现阿里云对象存储Oss文件上传的实现步骤,如果以上内容对你有帮助,可以请我(喝奶茶哦!) 后期持续更新更多Java相关内容,感谢一直以来对<码坑>博客支持的朋友!


0
博主关闭了所有页面的评论