zoukankan      html  css  js  c++  java
  • Aliyun Oss 上传文件

    Aliyun OSS

    OSS 简介

    阿里云对象存储OSS(Object Storage Service)是阿里云提供的海量、安全、低成本、高持久的云存储服务。

    OSS 基本概念

    官方文档:点我传送

    • 存储空间(Bucket)
    • 对象(Object)
    • ObjectKey
    • Region(地域)
    • Endpoint(访问域名)
    • AccessKey(访问密钥)

    OSS 功能概述

    官方文档:点我传送

    • 创建存储空间
    • 上传文件
      • 简单上传: 包括流式上传和文件上传。最大不能超过5GB。
      • 表单上传: 最大不能超过5GB。
      • 追加上传: 最大不能超过5GB。
      • 断点续传上传: 支持并发、断点续传、自定义分片大小。大文件上传推荐使用断点续传。最大不能超过48.8TB。
      • 分片上传: 当文件较大时,可以使用分片上传,最大不能超过48.8TB。
    • 下载文件

    OSS 使用

    使用步骤:
    p203792.jpg

    创建存储空间Bucket

    官方文档:点我传送

    40F06D90-71F6-4e46-AC2F-4B5E8C718676.png

    创建子目录

    创建目录,更好的区分图片存放的位置。也可以直接放在创建的Bucket上。
    2BADC1E0-B481-4880-912C-B007F4C462E4.png

    Java编码

    • controller 层
    /**
     * 图片上传 Controller
     */
    @RestController
    @RequestMapping("/images")
    public class ImagesController {
    
        @PostMapping("/upload")
        public void upload(@RequestParam("imageString") String imageString) throws UnsupportedEncodingException {
            String list = seafoodService.upload(imageString);
        }
        
    }
    
    • Service层

    interface Service

    /**
     * 上传图片 service接口
     */
    public interface ISeafoodService {
    
        /**
         * 图片上传
         * @author Hosystem
         * @create 2021-2-24
         * @desc 图片上传
         **/
        String upload(String imageString) throws UnsupportedEncodingException;
    }
    

    ServiceImpl

    /**
     * 上传图片 service
     */
    @Service
    public class SeafoodServiceImpl implements ISeafoodService {
    
        /**
         *  阿里云 OSS 配置抽取yml
         */
        @Autowired
        AliPayClientProperties aliPayClientProperties;
        
        /**
         * 图片上传
         * @author HYH
         * @create 2021-2-24
         * @desc 图片上传 将图片转换成base64编码然后传进来
         * 
         * 参考文档:https://help.aliyun.com/document_detail/84781.html?spm=a2c4g.11186623.2.10.e50c46a19Q1Q52
         **/
        @Override
        public String upload(String imageString) {
            // 创建OSSClient实例。
            OSS ossClient = new OSSClientBuilder().build(appProps.getAliOssClientProperties().getEndpoint(), appProps.getAliOssClientProperties().getAccessKeyId(), appProps.getAliOssClientProperties().getAccessKeySecret());
    
            // 创建一个Base64 对象
            Base64 base64 = new Base64();
    
            // 将传进来的base64编码 进行解码
            byte[] imageByte = base64.decode(imageString.toString());
    
            // 创建字节流 将base64解码后进行字节流转换
            ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(imageByte);
    
            // 上传路径 bucket目录名 + 图片的名称  使用UUID随机生成
            // OSS管理控制台将所有文件名以正斜线(/)结尾的文件显示为文件夹;
            // 如:abc/efg/123.jpg这个路径的文件,在OSS管理控制台上看起来就是123.jgp存放在abc文件夹下的efg子文件夹中。
            // 若想上传到bucket 则 String url = UUID.randomUUID().toString() + "." + "jpg";
            String url = appProps.getAliOssClientProperties().getDirectoryPath() + UUID.randomUUID().toString() + "." + "jpg";
    
            // 文件元信息(Object Meta):包括HTTP header和自定义元信息
            // 创建上传文件的元信息,可以通过文件元信息设置HTTP header。
            // 参考文档:https://help.aliyun.com/document_detail/84840.html
            ObjectMetadata objectMetadata = new ObjectMetadata();
            objectMetadata.setContentType("image/jpg");
    
            // 上传文件
            // 格式:ossClient.putObject("<yourBucketName>", "<yourObjectName>", new ByteArrayInputStream(content.getBytes()), meta);
            ossClient.putObject(appProps.getAliOssClientProperties().getBucketName(), url, byteArrayInputStream, objectMetadata);
    
            // 关闭OSSClient
            ossClient.shutdown();
    
            // 返回上传图片的OSS路径
            return appProps.getAliOssClientProperties().getUrl() + url;
        }
        
    }
    
    • yml配置抽取
    @Data
    @Component
    @Accessors(chain = true)
    @ConfigurationProperties(prefix = "aliOssClientProperties")
    public class AliOssClientProperties {
    
        /**
         *  阿里云OSS endpoint
         */
        private String endpoint;
    
        /**
         *  阿里云OSS AccessKey
         */
        private String accessKeyId;
    
        /**
         *  阿里云OSS AccessKeySecret
         */
        private String accessKeySecret;
    
        /**
         *  阿里云OSS bucketName
         */
        private String bucketName;
    
        /**
         *  阿里云OSS url
         */
        private String url;
    
        /**
         *  阿里云OSS directoryPath 目录路径
         */
        private String directoryPath;
    }
    
    • yml配置
      # http://<bucket>.<endpoint>/<yourfile>+<yourdirectoryPath>
    aliOssClientProperties:
      endpoint: oss-cn-shenzhen.aliyuncs.com
      accessKeyId: #accessKey
      accessKeySecret: #accessKeySecret
      bucketName: #bucketName
      url: https://<bucketName>.<endpoint>
      directoryPath: images/
    

    测试

    这里我通过swagger进行测试,也可以通过postman进行测试,直接定义常量imageString 当作参数使用。
    E0227E46-3158-483e-ABAE-11572DDCEB6E.png

    参考文档1:点我传送

    参考文档2:点我传送

    参考文档3:点我传送

  • 相关阅读:
    换行符 CR
    c# 定义的属性名与保留关键字冲突
    Redis 以window 服务启动
    c# Guid.NewGuid().ToString(format
    select 下拉源动态赋值
    html 控制input标签只能输入数字
    HTTP 错误 500.19
    Android debugger 出现提示Connected to the target VM, address: 'localhost:xxxx', transport: 'socket'
    siege--Web性能压测工具
    python+selenium上传文件注意点
  • 原文地址:https://www.cnblogs.com/HOsystem/p/14447740.html
Copyright © 2011-2022 走看看