详情页标题前

阿里云对象存储OSSGo-云淘科技

详情页1

本文以Go语言为例,讲解在服务端通过Go代码完成签名,并且设置上传回调,然后通过表单直传数据到OSS

前提条件

  • 应用服务器对应的域名可通过公网访问。
  • 应用服务器已经安装Go 1.6以上版本(执行命令go version进行验证)。
  • PC端浏览器支持JavaScript。

步骤1:配置应用服务器

  1. 下载应用服务器源码(Go版本)到应用服务器的目录下。
  2. 以Ubuntu 16.04为例,将源码放置到/home/aliyun/aliyun-oss-appserver-go目录下。
  3. 进入该目录,打开源码文件appserver.go,修改以下代码片段:
    // 请填写您的AccessKeyId。
    var accessKeyId string = ""
    
    // 请填写您的AccessKeySecret。
    var accessKeySecret string = ""
    
    // host的格式为bucketname.endpoint,请替换为您的真实信息。
    var host string = "https://bucket-name.oss-cn-hangzhou.aliyuncs.com'"
    
    // callbackUrl为上传回调服务器的URL,请将下面的IP和Port配置为您自己的真实信息。
    var callbackUrl string = "http://192.0.2.0:8888";
    
    // 上传文件时指定的前缀。
    var upload_dir string = "user-dir-prefix/"
    
    // 上传策略Policy的失效时间,单位为秒。
    var expire_time int64 = 30
    • accessKeyId:设置您的AccessKeyId。
    • accessKeySecret:设置您的AessKeySecret。
    • host:格式为https://bucketname.endpoint,例如https://bucket-name.oss-cn-hangzhou.aliyuncs.com。关于Endpoint的介绍,请参见Endpoint访问域名。
    • callbackUrl:设置上传回调URL,即回调服务器地址,用于处理应用服务器与OSS之间的通信。OSS会在文件上传完成后,把文件上传信息通过此回调URL发送给应用服务器。本例中修改为var callbackUrl string="http://192.0.2.0:1234";
    • dir:若要设置上传到OSS文件的前缀则需要配置此项,否则置空即可。

步骤2:配置客户端

  1. 下载客户端源码到PC端的本地目录。
  2. 将以文件解压,并打开upload.js文件,找到下面的代码语句:
    // serverUrl是用户获取签名和Policy等信息的应用服务器的URL,请将下面的IP和Port配置为您自己的真实信息。
    serverUrl ='http://192.0.2.0:8888'
  3. 将severUrl修改为应用服务器的地址。本示例中修改为serverUrl ='http://192.0.2.0:1234'

步骤3: 修改CORS

客户端进行表单直传到OSS时,会从浏览器向OSS发送带有Origin的请求消息。OSS对带有Origin头的请求消息会进行跨域规则(CORS)的验证。因此需要为Bucket设置跨域规则以支持Post方法。

  1. 登录OSS管理控制台。
  2. 单击Bucket列表,然后单击目标Bucket名称。
  3. 在左侧导航栏,选择数据安全 > 跨域设置。
  4. 单击创建规则,配置如下图所示。阿里云对象存储OSSGo-云淘科技

    说明 为了您的数据安全,实际使用时,
    来源建议填写实际允许访问的域名。更多配置信息请参见
    设置跨域访问。

步骤4:体验上传回调

  1. 启动应用服务器。


    /home/aliyun/aliyun-oss-appserver-go目录下,执行Go命令:
    go run appserver.go 192.0.2.0 1234。

    说明 请将IP和端口改成您配置的应用服务器的IP和端口。

  2. 启动客户端。
    1. 在PC端的客户端源码目录中,打开index.html文件。阿里云对象存储OSSGo-云淘科技

      重要 index.html文件不保证兼容IE 10以下版本浏览器,若使用IE 10以下版本浏览器出现问题时,您需要自行调试。

    2. 单击选择文件,选择指定类型的文件之后,单击开始上传。上传成功后,显示回调服务器返回的内容。阿里云对象存储OSSGo-云淘科技

应用服务器核心代码解析

应用服务器源码包含了签名直传服务和上传回调服务两个功能。

  • 签名直传服务

    签名直传服务响应客户端发送给应用服务器的GET消息,代码片段如下。

    func handlerRequest(w http.ResponseWriter, r *http.Request) {   
            if (r.Method == "GET") {
                    response := get_policy_token()
                    w.Header().Set("Access-Control-Allow-Methods", "POST")
                    w.Header().Set("Access-Control-Allow-Origin", "*")
                    io.WriteString(w, response)
            }
  • 上传回调服务

    上传回调服务响应OSS发送给应用服务器的POST消息,代码片段如下。

    if (r.Method == "POST") {
                    fmt.Println("
    Handle Post Request ... ")
    
                    // Get PublicKey bytes
                    bytePublicKey, err := getPublicKey(r)
                    if (err != nil) {
                            responseFailed(w)
                            return
                    }
    
                    // Get Authorization bytes : decode from Base64String
                    byteAuthorization, err := getAuthorization(r)
                    if (err != nil) {
                            responseFailed(w)
                            return
                    }
    
                    // Get MD5 bytes from Newly Constructed Authorization String. 
                    byteMD5, err := getMD5FromNewAuthString(r)
                    if (err != nil) {
                            responseFailed(w)
                            return
                    }
    
                    // verifySignature and response to client 
                    if (verifySignature(bytePublicKey, byteMD5, byteAuthorization)) {
                            // do something you want according to callback_body ...
    
                            responseSuccess(w)  // response OK : 200  
                    } else {
                            responseFailed(w)   // response FAILED : 400 
                    }
            }

    更多信息,请参见API文档Callback。

内容没看懂? 不太想学习?想快速解决? 有偿解决: 联系专家

阿里云企业补贴进行中: 马上申请

腾讯云限时活动1折起,即将结束: 马上收藏

同尘科技为腾讯云授权服务中心。

购买腾讯云产品享受折上折,更有现金返利:同意关联,立享优惠

转转请注明出处:https://www.yunxiaoer.com/158676.html

(0)
上一篇 2023年12月10日
下一篇 2023年12月10日
详情页2

相关推荐

  • 阿里云RDS数据库UpgradeDBInstanceMajorVersion – 升级RDS PostgreSQL数据库大版本-云淘科技

    该接口用于发起RDS PostgreSQL实例大版本升级任务。 接口说明 适用引擎 RDS PostgreSQL 相关功能文档 该API操作涉及费用,请仔细阅读相关功能文档,确保完全了解使用接口产生的费用、前提条件及使用后造成的影响后,再进行操作。 RDS PostgreSQL升级数据库大版本 调试 您可以在OpenAPI Explorer中直接运行该接口,…

    阿里云数据库 2023年12月9日
  • 阿里云对象存储OSSC++快速入门-云淘科技

    本节介绍如何快速使用OSS C++ SDK完成常见操作,如创建存储空间(Bucket)、上传文件、下载文件(Object)等。 说明 示例代码中的conf为ClientConfiguration的实例,ClientConfiguration是OssClient的配置类,您可以通过此配置类来配置代理、连接超时、最大连接数等参数。更多信息,请参见C++初始化。 …

    阿里云对象存储 2023年12月10日
  • 阿里云RDS数据库变更配置-云淘科技

    本文介绍如何变更RDS MariaDB实例配置,包括规格和存储空间。 变配方式 立即升降配:变配后,新的配置立即生效。包年包月实例和按量付费实例都支持立即升降配。 续费时升降配:是指对实例进行续费,并在续费时变更实例配置。仅包年包月实例支持续费时升降配,新的配置将在下一计费周期生效。例如,包月实例到期时间为2018年6月20日,您在2018年5月10日进行了…

    阿里云数据库 2023年12月9日
  • 信息流广告,信息流部分建议宽度830px,只针对默认列表样式,顺序随机
  • 阿里云对象存储OSS静态网站托管概述-云淘科技

    静态网站是指所有的网页都由静态内容构成,包括客户端执行的脚本(例如JavaScript)。您可以通过静态网站托管功能将您的静态网站托管到OSS的存储空间(Bucket),并使用Bucket的访问域名访问这个网站。 使用说明 配置静态网站托管时,您需要指定网站的默认首页和默认404页: 默认首页是您通过浏览器访问静态网站域名时,OSS返回的网站首页。 您为默认…

    阿里云对象存储 2023年12月10日
  • 阿里云ECS云服务器导出和导入安全组规则-云淘科技

    ECS控制台支持安全组规则导出和导入功能。本文为您介绍如何通过ECS控制台导出、导入安全组规则。 背景信息 将安全组下的安全组规则导出为JSON文件或CSV文件,用于本地备份。 将导出的文件中的安全组规则再次导入到安全组中,用于快速创建或恢复安全组规则。 根据需要对导出的安全组规则文件做修改,然后再使用修改后的文件进行规则导入。 安全组支持导入不同地域的安全…

    阿里云服务器 2023年12月9日

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信
本站为广大会员提供阿里云、腾讯云、华为云、百度云等一线大厂的购买,续费优惠,保证底价,买贵退差。