• 21、阿里云oss


    一、阿里云oss简介

    1 - 入口

    • oss入口:控制台 -> 对象存储 oss
      在这里插入图片描述

    • api文档:右下角 -> 常用入口 -> API 文档 -> 文档中心打开
      在这里插入图片描述
      在这里插入图片描述

    2 - 资源术语

    在这里插入图片描述

    3 - bucket新建

    • 其他的配置默认即可:有需要再自行查阅资料
      • HDFS服务:未开通
      • 同城冗余存储:未开通
      • 版本控制:未开通
      • 服务端加密:无
      • 实时日志查询:未开通
      • 定时备份:未开通
        在这里插入图片描述

    二、代码控制文件上传

    1 - 官方入门

    在这里插入图片描述

    • 官方快速入门
    package main
    import (
        "fmt"
        "os"
        "github.com/aliyun/aliyun-oss-go-sdk/oss"
    )
    func handleError(err error) {
        fmt.Println("Error:", err)
        os.Exit(-1)
    }
    func main() {
        // yourEndpoint填写Bucket对应的Endpoint,以华东1(杭州)为例,填写为https://oss-cn-hangzhou.aliyuncs.com。其它Region请按实际情况填写。
        endpoint := "yourEndpoint"
        // 阿里云账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM用户进行API访问或日常运维,请登录RAM控制台创建RAM用户。
        accessKeyId := "yourAccessKeyId"
        accessKeySecret := "yourAccessKeySecret"
        // yourBucketName填写存储空间名称。
        bucketName := "yourBucketName"
        // yourObjectName填写Object完整路径,完整路径不包含Bucket名称。
        objectName := "yourObjectName"
        // yourLocalFileName填写本地文件的完整路径。
        localFileName := "yourLocalFileName"
        // 创建OSSClient实例。
        client, err := oss.New(endpoint, accessKeyId, accessKeySecret)
        if err != nil {
            handleError(err)
        }
        // 获取存储空间。
        bucket, err := client.Bucket(bucketName)
        if err != nil {
            handleError(err)
        }
        // 上传文件。
        err = bucket.PutObjectFromFile(objectName, localFileName)
        if err != nil {
            handleError(err)
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 查看Endpoint
      在这里插入图片描述

    2 - 创建Accesskey

    • Accesskey入口: 控制台 -> 头像
      在这里插入图片描述

    3 - RAM管理

    • RAM访问控制入口
      在这里插入图片描述
    • RAM新建用户
      在这里插入图片描述
      在这里插入图片描述
      在这里插入图片描述
      在这里插入图片描述

    4 - 测试上传图片

    package main
    
    import (
    	"fmt"
    	"github.com/aliyun/aliyun-oss-go-sdk/oss"
    	"os"
    )
    
    func handleError(err error) {
    	fmt.Println("Error:", err)
    	os.Exit(-1)
    }
    func main() {
    	// Endpoint以杭州为例,其它Region请按实际情况填写。
    	endpoint := "http://oss-cn-shanghai.aliyuncs.com"
    	// 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录 https://ram.console.aliyun.com 创建RAM账号。
    	accessKeyId := "上一步获取的accessKeyId"
    	accessKeySecret := "上一步获取的accessKeySecret"
    	bucketName := "my-jp-oss"
    	// 上传文件到OSS时需要指定包含文件后缀在内的完整路径,例如abc/efg/123.jpg。
    	objectName := "goods/first.jpg"
    	// 由本地文件路径加文件名包括后缀组成,例如/users/local/myfile.txt。
    	localFileName := `D:\Downloads\360Downloads\lua.png`
    	// 创建OSSClient实例。
    	client, err := oss.New(endpoint, accessKeyId, accessKeySecret)
    	if err != nil {
    		handleError(err)
    	}
    	// 获取存储空间。
    	bucket, err := client.Bucket(bucketName)
    	if err != nil {
    		handleError(err)
    	}
    	// 上传文件。
    	err = bucket.PutObjectFromFile(objectName, localFileName)
    	if err != nil {
    		handleError(err)
    	}
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40

    在这里插入图片描述


    三、前端直传oss

    1 - 传统方式文件保存的弊端

    在这里插入图片描述

    2 - 前端直传oss的流程

    考虑到安全问题:我们不应该直接将id和secrect保存在前端直传oss

    在这里插入图片描述

    3 - gin集成前端直传

    • 官方地址https://help.aliyun.com/document_detail/91818.html
    • 按步骤实现
      • 步骤1: 下载应用服务器源码(Go版本)到应用服务器的目录下
      • 步骤2: 下载客户端源码到PC端的本地目录
      • 步骤3: 修改CORS(根据官方的步骤)

    在这里插入图片描述

    • 解压处上述下载的文件到测试工程中
      在这里插入图片描述
    • appserver.go:修改id,secret以及bucketname
      在这里插入图片描述
    • 终端中打开运行
      在这里插入图片描述
    • 浏览器访问http://127.0.0.1:8082/
      在这里插入图片描述
    • 运行index.html
      在这里插入图片描述
    • 打开upload.js文件:修改serverUrl
        if (xmlhttp!=null)
        {
            // serverUrl是 用户获取 '签名和Policy' 等信息的应用服务器的URL,请将下面的IP和Port配置为您自己的真实信息。
            serverUrl = 'http://127.0.0.1:8082'
    		
            xmlhttp.open( "GET", serverUrl, false );
            xmlhttp.send( null );
            return xmlhttp.responseText
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 返回到前端页面选择文件上传
      在这里插入图片描述
      在这里插入图片描述
    • 不适用回调的上传:aliyun-oss-appserver-js-master/upload.js,注释掉callback,刷新后重新访问
        new_multipart_params = {
            'key' : g_object_name,
            'policy': policyBase64,
            'OSSAccessKeyId': accessid, 
            'success_action_status' : '200', //让服务端返回200,不然,默认会返回204
            // 'callback' : callbackbody,
            'signature': signature,
        };
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    在这里插入图片描述

    4 - 内网穿透

    • 为什么需要内网穿透:续断 -> https://cloud.zhexi.tech/
      在这里插入图片描述

    • aliyun-oss-appserver-js-master/upload.js:需要开启callback

        new_multipart_params = {
            'key' : g_object_name,
            'policy': policyBase64,
            'OSSAccessKeyId': accessid, 
            'success_action_status' : '200', //让服务端返回200,不然,默认会返回204
            'callback' : callbackbody,
            'signature': signature,
        };
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    四、gin集成oss

    以下列出主要的修改,其他可以查看源码

    • oss_web/static/js/upload.js:需要根据自己的ip修改serverUrl

    在这里插入图片描述

    • oss_web/utils/oss.govar expire_time int64 = 3000,也可以将这个配置提取到nacos中

    在这里插入图片描述

    • nacos主要配置
    {
        "name":"oss_web",
        "host":"192.168.78.1",
        "tags":["mxshop","imooc","bobby","oss","web"],
        "port":8029,
        "oss":{
            "key":"xxxxxxx",
            "secrect":"xxxxx",
            "host":"my-jp-oss.oss-cn-shanghai.aliyuncs.com",
            "callback_url":"sadaxxxxxxx",
            "upload_dir":"mxshop_images"
        },
        "jwt":{
            "key":"VYLDYq3&hGWjWqF$K1ih"
        },
        "consul":{
            "host":"192.168.78.31",
            "port": 8500
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21

    六、完整源码

    • 完整源码下载mxshop_srvsV8.5.rar
    • 源码说明:(nacos的ip配置自行修改,全局变量DEV_CONFIG设置:1=zsz,2=comp,3=home)
      • goods_srv/model/sql/mxshop_goods.sql:包含了建表语句
      • other_import/api.json:YApi的导入文件
      • other_import/nacos_config_export_user.zip:nacos的user配置集导入文件
      • other_import/nacos_config_export_goods.zip:nacos的goods配置集导入文件
  • 相关阅读:
    第2章 内容管理模块v3.1
    Spring Boot对账号密码进行加密储存
    Spring Cloud框架学习-Spring Cloud Hystrix
    【408考研】数据结构 ——数组与特殊矩阵
    腾讯云服务器多少钱一年?2023年腾讯云优惠云服务器推荐
    华清 c++ day7 9月14
    sqoop部署
    常用设计模式——模板方法模式
    表格的细线边框 内边距padding 外边距margin
    记一次 .NET 某拍摄监控软件 卡死分析
  • 原文地址:https://blog.csdn.net/qq23001186/article/details/126159603