[UMU 学 golang](4) 简单的 AWS S3 客户端

  公司搞了一套兼容 Amazon S3 的云存储系统,用 C++ 写客户端很蛋疼,UMU 决定还是用 go 来写一个。

  首先找到一个靠谱的开源项目,运行以下命令安装:

go get github.com/mitchellh/goamz

  它内部还用到了 github.com/vaughan0/go-ini。

  然后看一下例子:

package main

import (
  "github.com/mitchellh/goamz/aws"
  "github.com/mitchellh/goamz/s3"
  "log"
  "fmt"
)

func main() {
  auth, err := aws.EnvAuth()
  if err != nil {
    log.Fatal(err)
  }
  client := s3.New(auth, aws.USEast)
  resp, err := client.ListBuckets()

  if err != nil {
    log.Fatal(err)
  }

  log.Print(fmt.Sprintf("%T %+v", resp.Buckets[0], resp.Buckets[0]))
}

  要改的地方不多:1、认证方式可以改为 aws.GetAuth,但这样容易暴露 AccessKey、SecretKey,所以 UMU 下面贴出的代码还是使用 aws.EnvAuth()。2、aws.USEast 改为我们自己的。3、UMU 加了列出所有文件的功能。详见代码:

package main

import (
	"fmt"
	"github.com/mitchellh/goamz/aws"
	"github.com/mitchellh/goamz/s3"
	"log"
)

func main() {
	auth, err := aws.EnvAuth()
	if err != nil {
		log.Fatal(err)
	}

	var cnc = aws.Region{
		"cnc", // Name
		"",    // EC2Endpoint
		"http://s3.bj.xs3cnc.com", // S3Endpoint
		"",    // S3BucketEndpoint
		false, // S3LocationConstraint
		false, // S3LowercaseBucket
		"",    // SDBEndpoint
		"",    // SNSEndpoint
		"",    // SQSEndpoint
		"",    // IAMEndpoint
		"",    // ELBEndpoint
		"",    // AutoScalingEndpoint
		"",    // RdsEndpoint
		"",    // Route53Endpoint
	}
	client := s3.New(auth, cnc)
	resp, err := client.ListBuckets()
	if err != nil {
		log.Fatal(err)
	}

	for _, b := range resp.Buckets {
		fmt.Printf("Bucket Name: %s\n", b.Name)
		bc, err := b.GetBucketContents()
		if err == nil {
			for _, key := range *bc {
				fmt.Printf("\t%s, %s, %d, %s, %s, %s\n",
					key.Key, key.LastModified, key.Size, key.StorageClass,
					key.Owner.ID, key.Owner.DisplayName)
			}
		}
	}
}

  效果如下:

  参照对象:

时间: 2024-10-29 10:45:40

[UMU 学 golang](4) 简单的 AWS S3 客户端的相关文章

[UMU 学 golang](1) Hello code!

一直玩 WSH,被说逼格跟不上时代,又据说 go 即将发布的 1.5 版解决了 GC stop-the-world 问题了,所以 UMU 打算以后用它来开发工具. 最近想统计代码行数,以前用 VBS 写的一时间居然找不到,直接就用 golang 写了一个,基本从零开始用了大约 4 小时完成.下面谈一下心得. 1.golang 的 runtime 居然没有 set,只能用 map 代替了,一开始觉得不优雅,不过想来也差不多,不计较那么多了. 2.语法还确实挺简洁的,第一次练手就感觉学这个语言,其实

[UMU 学 golang](2) 升级 1.5 + 优化

安装 1.5 时,直接覆盖 1.4.2,结果不能用了,报错:imports runtime: C source files not allowed when not using cgo or SWIG 解决方法是删掉 go 1.5--然后修复安装一遍. 优化:1.加了计时功能,纯属蛋疼.2.学到一个不占空间的 struct{},map[string]bool 改为 map[string]struct{}. // UMU @ 2015-08-17 11:30 // Last update: 201

[UMU 学 golang](5) HTTP Echo Server

做加速时经常需要用到 HTTP Echo Server 来测试加速有没有成功,如果成功了,是显示请求来自加速代理服务器.原来用 node.js 写了一个,代码如下: var http = require('http'); http.createServer( function (req, res) { res.writeHead(200, {'Content-Type': 'text/plain'}); var ip = req.headers['x-forwarded-for'] || req

[UMU 学 golang](3) TCP Echo Server

测试需要,以前用 C + libevent 写了一个 TCP Echo Server,返回服务器时间.客户端地址信息和客户端发送的原内容.为了水一篇,现在改为 golang 实现. package main import ( "fmt" "io" "net" "os" "time" ) const BUFFER_SIZE = 1024 * 4 var buffer = make([]byte, BUFFER

用Node完成AWS S3的Upload流程之全世界最简版

开场: 查了两天文档,Error了38次,最后索性去掉所有附加条件, 连界面也不要了,在命令行里跑通了一坨最干瘪的Upload流程! 还冒着热气…… 在此先做记录,明天可以搭配美美的界面继续调试了. 近来压抑的心情顿时舒畅了百分之十. 1. 注册以及相关配置: 注册一枚Amazon账户,如果你经常在Amazon上买买买, 那你其实已经有了Amazon的Retail账户,可以直接登录为AWS账户, 但要变身为这么高大上的账户,不出血怎么可能? 在这过程中,需要花费1美元的认证费用…… 我把信用卡的

AWS S3 API实现文件上传下载

近日项目需要使用AWS S3的API实现文件的上传和下载功能,才发现网上关于.net实现该功能的文章不多,有几篇也都是很老版本的AWS的使用描述了,写法和封装的类等等都基本上报废了.虽然这样,但还是很感谢那几篇文章给我指点了方向.下面我就把实现API的方法提供给大家: 注:此API实现方法是基于AWSSDK.2.3.50.1版本实现的. 1.首先必须拥有 Amazon Web Services 账户才能访问此服务,目前有一定流量的适用,当流量超过之后会自动收费 2.根据提供的Access Key

1101: 零起点学算法08——简单的输入和计算(a+b)

1101: 零起点学算法08--简单的输入和计算(a+b) Time Limit: 1 Sec  Memory Limit: 128 MB   64bit IO Format: %lldSubmitted: 3669  Accepted: 1997[Submit][Status][Web Board] Description 前面7道题做下来,对输出和计算有点感觉了吧? 不过很可惜的是前面的做法,好像太死了,写了一个计算3+4的程序,计算5+6又得改程序,计算机真的只能这么实现,那么我们比计算机

AWS s3 python sdk code examples

Yet another easy-to-understand, easy-to-use aws s3 python sdk code examples. github地址:https://github.com/garyelephant/aws-s3-python-sdk-examples. """ Yet another s3 python sdk example. based on boto 2.27.0 """ import time imp

AWS S3 CLI的权限bug

使用AWS CLI在S3上创建了一个bucket,上传文件的时候报以下错误: A client error (AccessDenied) occurred when calling the CreateMultipartUpload operation: Anonymous users cannot initiate multipart uploads. Please authenticate. 执行命令:aws s3 ls s3://mybucket-1 同样提示权限错误. 之前使用AWS C