sdk

package module
v0.1.1 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Nov 18, 2020 License: Apache-2.0 Imports: 0 Imported by: 0

README

AWS S3 SDK For Go使用指南


[TOC]

1 概述

此SDK是基于aws-sdk-go改造,适用于golang开发环境。

2 环境准备

配置Go 开发环境

3 初始化

3.1 下载安装SDK

go get github.com/codjust/aws-sdk-go

3.2 获取秘钥

1、开通KS3服务,http://www.ksyun.com/user/register 注册账号
2、进入控制台, http://ks3.ksyun.com/console.html#/setting 获取AccessKeyID 、AccessKeySecret

3.3 初始化

1、引用相关包

import(
	"github.com/codjust/aws-sdk-go/aws"
	"github.com/codjust/aws-sdk-go/aws/credentials"
	"github.com/codjust/aws-sdk-go/service/s3"
)

2、初始化客户端

credentials := credentials.NewStaticCredentials("<AccessKeyID>","<AccessKeySecret>","")
client := s3.New(&aws.Config{
	Region: "HANGZHOU",
	Credentials: credentials,
	Endpoint:"kssws.ks-cdn.com",//s3地址
	DisableSSL:true,//是否禁用https
	LogLevel:1,//是否开启日志,0为关闭日志,1为开启日志
	S3ForcePathStyle:false,//是否强制使用path style方式访问
	LogHTTPBody:true,//是否把HTTP请求body打入日志
	Logger:os.Stdout,//打日志的位置
	})

4 使用示例

输入参数params和返回结果resp详细结构请参考github.com/codjust/aws-sdk-go/service/s3/api.go

4.1 上传文件
params := &s3.PutObjectInput{
	Bucket:             aws.String("BucketName"), // bucket名称
	Key:                aws.String("ObjectKey"),  // object key
	ACL:                aws.String("ObjectCannedACL"),//权限,支持private(私有),public-read(公开读)
	Body:               bytes.NewReader([]byte("PAYLOAD")),//要上传的内容
	ContentType:        aws.String("application/ocet-stream"),//设置content-type
	Metadata: map[string]*string{
		//"Key": aws.String("MetadataValue"), // 设置用户元数据
		// More values...
	},
}
resp, err := client.PutObject(params)
if err!= nil{
	panic(err)
}
fmt.Println(resp)
//获取新的文件名
fmt.Println(*resp.NewFileName)
4.2 下载文件
params := &s3.GetObjectInput{
	Bucket:             aws.String("BucketName"), // bucket名称
	Key:                aws.String("ObjectKey"),  // object key
}
resp, err := client.GetObject(params)
if err != nil{
	panic(err)
}
//读取返回结果中body的前20个字节
b := make([]byte, 20)
n, err := resp.Body.Read(b)
fmt.Printf("%-20s %-2v %v\n", b[:n], n, err)
4.3 生成文件下载外链
params := &s3.GetObjectInput{
	Bucket:             aws.String("BucketName"), // bucket名称
	Key:                aws.String("ObjectKey"),  // object key
	ResponseCacheControl:       aws.String("ResponseCacheControl"),//控制返回的Cache-Control header
	ResponseContentDisposition: aws.String("ResponseContentDisposition"),//控制返回的Content-Disposition header
	ResponseContentEncoding:    aws.String("ResponseContentEncoding"),//控制返回的Content-Encoding header
	ResponseContentLanguage:    aws.String("ResponseContentLanguage"),//控制返回的Content-Language header
	ResponseContentType:        aws.String("ResponseContentType"),//控制返回的Content-Type header
}
resp, err := client.GetObjectPresignedUrl(params,1444370289000000000)//第二个参数为外链过期时间,第二个参数为time.Duration类型
if err!=nil {
	panic(err)
}
fmt.Println(resp)//resp即生成的外链地址,类型为url.URL
4.4 生成文件上传外链
params := &s3.PutObjectInput{
	Bucket:             aws.String(bucket), // bucket名称
	Key:                aws.String(key),  // object key
	ACL:				aws.String("public-read"),//设置ACL
	ContentType:        aws.String("application/ocet-stream"),//设置文件的content-type
	ContentMaxLength:	aws.Long(20),//设置允许的最大长度,对应的header:x-amz-content-maxlength
}
resp, err := client.PutObjectPresignedUrl(params,1444370289000000000)//第二个参数为外链过期时间,第二个参数为time.Duration类型
if err!=nil {
	panic(err)
}

httpReq, _ := http.NewRequest("PUT", "", strings.NewReader("123"))
httpReq.URL = resp
httpReq.Header["x-amz-acl"] = []string{"public-read"}
httpReq.Header["x-amz-content-maxlength"] = []string{"20"}
httpReq.Header.Add("Content-Type","application/ocet-stream")
fmt.Println(httpReq)
httpRep,err := http.DefaultClient.Do(httpReq)
fmt.Println(httpRep)
if err != nil{
	panic(err)
}
4.5 生成设置文件ACL的外链
params := &s3.PutObjectACLInput{
	Bucket:             aws.String(bucket), // bucket名称
	Key:                aws.String(key),  // object key
	ACL:				aws.String("private"),//设置ACL
	ContentType:		aws.String("text/plain"),
}
resp, err := client.PutObjectACLPresignedUrl(params,1444370289000000000)//第二个参数为外链过期时间,第二个参数为time.Duration类型
if err!=nil {
	panic(err)
}
fmt.Println(resp)//resp即生成的外链地址,类型为url.URL

httpReq, _ := http.NewRequest("PUT", "", nil)
httpReq.URL = resp
httpReq.Header["x-amz-acl"] = []string{"private"}
httpReq.Header.Add("Content-Type","text/plain")
fmt.Println(httpReq)
httpRep,err := http.DefaultClient.Do(httpReq)
if err != nil{
	panic(err)
}
fmt.Println(httpRep)
4.7 初始化分块上传
params := &s3.CreateMultipartUploadInput{
	Bucket:             aws.String("BucketName"), // bucket名称
	Key:                aws.String("ObjectKey"),  // object key
	ACL:                aws.String("ObjectCannedACL"),//权限,支持private(私有),public-read(公开读)
	ContentType:        aws.String("application/ocet-stream"),//设置content-type
	Metadata: map[string]*string{
		//"Key": aws.String("MetadataValue"), // 设置用户元数据
		// More values...
	},
}
resp, err := client.CreateMultipartUpload(params)
if err != nil{
	panic(err)
}
//获取这次初始化的uploadid
fmt.Println(*resp.UploadID)
4.8 分块上传-上传块
params := &s3.UploadPartInput{
	Bucket:aws.String(bucket),//bucket名称
	Key:aws.String(key),//文件名
	PartNumber:aws.Long(1),//当前块的序号
	UploadID:aws.String(uploadId),//由初始化获取到得uploadid
	Body:strings.NewReader(content),//当前块的内容
	ContentLength:aws.Long(int64(len(content))),//内容长度
}
resp,err := client.UploadPart(params)
if err != nil{
	panic(err)
}
fmt.Println(resp)
4.9 完成分块上传并合并块
params := &s3.CompleteMultipartUploadInput{
	Bucket:aws.String(bucket),//bucket名称
	Key:aws.String(key),//文件名
	UploadID:aws.String(uploadId),//由初始化获取到得uploadid
	MultipartUpload:&s3.CompletedMultipartUpload{
		Parts:<已经完成的块列表>,//类型为*s3.CompletedPart数组
	},
}
resp,err := client.CompleteMultipartUpload(params)
if err != nil{
	panic(err)
}
fmt.Println(resp)
4.10 取消分块上传
params := &s3.AbortMultipartUploadInput{
	Bucket:aws.String(bucket),//bucket名称
	Key:aws.String(key),//文件名
	UploadID:aws.String(uploadId),//由初始化获取到得uploadid
}
resp,err := client.AbortMultipartUpload(params)
if err != nil{
	panic(err)
}
fmt.Println(resp)
4.11 罗列分块上传已经上传的块
params := &s3.ListPartsInput{
	Bucket:aws.String(bucket),//bucket名称
	Key:aws.String(key),//文件名
	UploadID:aws.String(uploadId),//由初始化获取到得uploadid
}
resp,err := client.ListParts(params)
if err != nil{
	panic(err)
}
fmt.Println(resp)
4.12 计算token(移动端相关)
package main
import(
	"crypto/hmac"
	"crypto/sha1"
	"encoding/base64"
	"fmt"
)
func main(){
	AccessKeyId := "AccessKeyId"
	AccessKeySecret:= "AccessKeySecret"
	stringToSign := "stringToSign"

	signature := string(base64Encode(makeHmac([]byte(AccessKeySecret), []byte(stringToSign))))
token := "KSS "+AccessKeyId+":"+signature
fmt.Println(token)
}
func makeHmac(key []byte, data []byte) []byte {
	hash := hmac.New(sha1.New, key)
	hash.Write(data)
	return hash.Sum(nil)
}	
func base64Encode(src []byte) []byte {  
    return []byte(base64.StdEncoding.EncodeToString(src))  
} 

Documentation

Overview

Package sdk is the official AWS SDK for the Go programming language.

See our Developer Guide for information for on getting started and using the SDK.

https://github.com/codjust/aws-sdk-go/wiki

Directories

Path Synopsis
aws
Package aws provides core functionality for making requests to AWS services.
Package aws provides core functionality for making requests to AWS services.
awserr
Package awserr represents API error interface accessors for the SDK.
Package awserr represents API error interface accessors for the SDK.
credentials
Package credentials provides credential retrieval and management The Credentials is the primary method of getting access to and managing credentials Values.
Package credentials provides credential retrieval and management The Credentials is the primary method of getting access to and managing credentials Values.
internal
apierr
Package apierr represents API error types.
Package apierr represents API error types.
endpoints
Package endpoints validates regional endpoints for services.
Package endpoints validates regional endpoints for services.
model/api
Package api represents API abstractions for rendering service generated files.
Package api represents API abstractions for rendering service generated files.
model/cli/gen-api
Command aws-gen-gocli parses a JSON description of an AWS API and generates a Go file containing a client for the API.
Command aws-gen-gocli parses a JSON description of an AWS API and generates a Go file containing a client for the API.
model/cli/gen-endpoints
Command aws-gen-goendpoints parses a JSON description of the AWS endpoint discovery logic and generates a Go file which returns an endpoint.
Command aws-gen-goendpoints parses a JSON description of the AWS endpoint discovery logic and generates a Go file which returns an endpoint.
protocol/ec2query
Package ec2query provides serialisation of AWS EC2 requests and responses.
Package ec2query provides serialisation of AWS EC2 requests and responses.
protocol/json/jsonutil
Package jsonutil provides JSON serialisation of AWS requests and responses.
Package jsonutil provides JSON serialisation of AWS requests and responses.
protocol/jsonrpc
Package jsonrpc provides JSON RPC utilities for serialisation of AWS requests and responses.
Package jsonrpc provides JSON RPC utilities for serialisation of AWS requests and responses.
protocol/query
Package query provides serialisation of AWS query requests, and responses.
Package query provides serialisation of AWS query requests, and responses.
protocol/rest
Package rest provides RESTful serialisation of AWS requests and responses.
Package rest provides RESTful serialisation of AWS requests and responses.
protocol/restjson
Package restjson provides RESTful JSON serialisation of AWS requests and responses.
Package restjson provides RESTful JSON serialisation of AWS requests and responses.
protocol/restxml
Package restxml provides RESTful XML serialisation of AWS requests and responses.
Package restxml provides RESTful XML serialisation of AWS requests and responses.
protocol/xml/xmlutil
Package xmlutil provides XML serialisation of AWS requests and responses.
Package xmlutil provides XML serialisation of AWS requests and responses.
signer/v4
Package v4 implements signing for AWS V4 signer
Package v4 implements signing for AWS V4 signer
test/integration
Package integration performs initialization and validation for integration tests.
Package integration performs initialization and validation for integration tests.
test/unit
Package unit performs initialization and validation for unit tests
Package unit performs initialization and validation for unit tests
util/utilassert
Package utilassert provides testing assertion generation functions.
Package utilassert provides testing assertion generation functions.
util/utilsort
Package utilsort provides sorting utility methods.
Package utilsort provides sorting utility methods.
Package service contains automatically generated AWS clients.
Package service contains automatically generated AWS clients.
s3
Package s3 provides a client for Amazon Simple Storage Service.
Package s3 provides a client for Amazon Simple Storage Service.
s3/s3iface
Package s3iface provides an interface for the Amazon Simple Storage Service.
Package s3iface provides an interface for the Amazon Simple Storage Service.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL