OSS签名Header实现Demo(GoLang)

本文涉及的产品
对象存储 OSS,20GB 3个月
对象存储 OSS,恶意文件检测 1000次 1年
对象存储 OSS,内容安全 1000次 1年
简介: OSS的集成上传和下载提供了SDK可以直接使用,但实际使用中一些用户受限环境或者设备限制需要使用api方式来实现上传和下载,本文以PutObject接口为例,提供了GoLang实现的demo

概述

OSS的集成上传和下载提供了SDK可以直接使用,但实际使用中一些用户受限环境或者设备限制需要使用api方式来实现上传和下载,本文以PutObject接口为例,提供了GoLang实现的demo。
注:建议优先使用OSS提供SDK,本文提供的只是签名实现上传demo,实际使用中需要结合业务来进行改动代码

详细信息

PutObject实现demo(测试环境go1.7.6):

package main

import (
 "crypto/hmac"
 "crypto/sha1"
 "encoding/base64"
 "fmt"
 "io/ioutil"
 "net/http"
 "strings"
 "time"
)

func main() {
 bucketname := "bucket名称"
 endpoint := "oss-cn-hangzhou.aliyuncs.com"
 objectname := "mytest/go.txt"  //存储路径
 accesskey := "xx"  //您的Accesskey
 accesskeysecret := "xx" //您的Accesskeysecret
 contenttype := "application/json"
 gmtdate := time.Now().UTC().Format(http.TimeFormat)
 stringtosgin := "PUT\n\n" + contenttype + "\n" + gmtdate + "\n" + "/" + bucketname + "/" + objectname
 // HMACSHA1 实现部分
 key := []byte(accesskeysecret)
 mac := hmac.New(sha1.New, key)
 mac.Write([]byte(stringtosgin))
 //进行base64编码
 signature := base64.StdEncoding.EncodeToString(mac.Sum(nil))

 url := "http://" + bucketname + "." + endpoint + "/" + objectname

 payload := strings.NewReader("{go:test}")

 req, _ := http.NewRequest("PUT", url, payload)

 req.Header.Add("Content-Type", contenttype)
 req.Header.Add("Authorization", "OSS "+accesskey+":"+signature)
 req.Header.Add("Date", gmtdate)
 res, _ := http.DefaultClient.Do(req)

 defer res.Body.Close()
 body, _ := ioutil.ReadAll(res.Body)

 fmt.Println(res)
 fmt.Println(string(body))
}

 

输出结果

{200 OK 200 HTTP/1.1 1 1 map[Server:[AliyunOSS] Date:[Thu, 09 Apr 2020 09:16:47 GMT] Content-Length:[0] Connection:[keep-alive] X-Oss-Request-Id:[5E8EE7FF990C633330489D8D] Etag:["04114792F189E2CED819A7229B699B0A"] X-Oss-Hash-Crc64ecma:[13429510132257231065] Content-Md5:[BBFHkvGJ4s7YGacim2mbCg==] X-Oss-Server-Time:[92]] 0x71d940 0 [] false false map[] 0xc0420c20f0 <nil>}
相关实践学习
借助OSS搭建在线教育视频课程分享网站
本教程介绍如何基于云服务器ECS和对象存储OSS,搭建一个在线教育视频课程分享网站。
目录
相关文章
|
6月前
|
弹性计算 前端开发 小程序
微信小程序上传文件至阿里云OSS直传(java后端签名+前端直传)
当前的通用文件上传方式是通过前端上传到服务器,再由服务器转存至对象存储。这种方式在处理小文件时效率尚可,但大文件上传因受限于服务器带宽,速度较慢。例如,一个100MB的文件在5Mbps带宽的阿里云ECS上上传至服务器需160秒。为解决此问题,可以采用后端签名的方式,使微信小程序直接上传文件到阿里云OSS,绕过服务器中转。具体操作包括在JAVA后端引入相关依赖,生成签名,并在微信小程序前端使用这个签名进行文件上传,注意设置正确的请求头和formData参数。这样能提高大文件上传的速度。
1117 1
|
对象存储
阿里云OSS 服务端签名后直传之分片上传(结合element-ui的upload组件)
阿里云OSS 服务端签名后直传之分片上传(结合element-ui的upload组件)
498 0
|
6月前
|
存储 安全 API
对象存储OSS产品常见问题之在URL中包含签名如何解决
对象存储OSS是基于互联网的数据存储服务模式,让用户可以安全、可靠地存储大量非结构化数据,如图片、音频、视频、文档等任意类型文件,并通过简单的基于HTTP/HTTPS协议的RESTful API接口进行访问和管理。本帖梳理了用户在实际使用中可能遇到的各种常见问题,涵盖了基础操作、性能优化、安全设置、费用管理、数据备份与恢复、跨区域同步、API接口调用等多个方面。
291 0
|
6月前
|
DataWorks 算法 对象存储
这个问题可能是由于DataWorks和OSS之间的签名算法不一致导致的
这个问题可能是由于DataWorks和OSS之间的签名算法不一致导致的
44 2
|
存储 前端开发 JavaScript
Nestjs+Vue实现阿里云OSS服务端签名直传
阿里云 OSS 是常用的对象存储服务,借助其提供的 SDK,客户端(浏览器,小程序等)可以非常方便的将文件上传到 OSS 进行管理。
973 0
Nestjs+Vue实现阿里云OSS服务端签名直传
|
存储 域名解析 安全
Nest 实现OSS 服务端签名直传并设置上传回调
Nest 实现OSS 服务端签名直传并设置上传回调
595 0
|
存储 前端开发 安全
oss服务端签名后直传分析与代码实现
oss服务端签名后直传分析与代码实现
990 0
|
存储 前端开发 Java
四步解决!OSS对象存储文件上传功能(服务端签名后直传,建议收藏)
四步解决!OSS对象存储文件上传功能(服务端签名后直传,建议收藏)
2948 2
四步解决!OSS对象存储文件上传功能(服务端签名后直传,建议收藏)
|
小程序 JavaScript 前端开发
微信小程序:阿里云OSS直传实践-PHP实现服务端签名
微信小程序:阿里云OSS直传实践-PHP实现服务端签名
981 0
微信小程序:阿里云OSS直传实践-PHP实现服务端签名
|
JavaScript 前端开发 Java
Vue获取服务端签名web端直传OSS,各种报错The bucket POST must contain the specified ‘key‘.等解决办法
Vue获取服务端签名web端直传OSS,各种报错The bucket POST must contain the specified ‘key‘.等解决办法
1162 0
Vue获取服务端签名web端直传OSS,各种报错The bucket POST must contain the specified ‘key‘.等解决办法