最近公司使用s3做文件存储服务器,因此在程序中需要调用s3的api,目前程序中使用了python和java版本的s3的api,简单做下记录,方便以后使用。
一、s3 api使用python版
1.安装boto3的sdk
pip install boto3==1.4.7
2.创建s3的api客户端
import boto3
from botocore.client import Config
import os
import sys
import threading
#创建s3链接,如果s3服务器是第四代,则需要设置signature_version='s3v4'
s3_client = boto3.client('s3', endpoint_url='s3服务器地址',
aws_access_key_id='s3服务器的access_key_id',
aws_secret_access_key='s3服务器的secret_access_key',
region_name='s3服务器的时区,这里可以填写cn-north-1',
config=Config(signature_version='s3'))
3.获取s3中bucket列表
bucket_list = s3_client.list_buckets()
print bucket_list
4.创建bucket
bucket = s3_client.create_bucket(Bucket='bucket的名称')
print bucket
5.获取bucket信息
bucket_info = s3_client.head_bucket(Bucket='bucket的名称')
print bucket_info
6.删除bucket
#bucket_delete = s3_client.delete_bucket(Bucket='bucket的名称')
7.上传文件到s3服务器
# s3_client.upload_file("上传的源文件地址", "bucket名称", "上传文件在s3上对应的key名称", ExtraArgs={'ACL': 'public-read'})
或者
s3_client.upload_file("上传的源文件地址", "bucket名称", "上传文件在s3上对应的key名称",
ExtraArgs={'ACL': 'public-read'},
Callback=UploadProgressPercentage("上传的源文件地址"))
Callback属性对应的类方法如下,该类方法在控制台中打印了上传文件的进度
class UploadProgressPercentage(object):
def __init__(self, filename):
self._filename = filename
self._size = float(os.path.getsize(filename))
self._seen_so_far = 0
self._lock = threading.Lock()
def __call__(self, bytes_amount):
# To simplify we'll assume this is hooked up
# to a single filename.
with self._lock:
self._seen_so_far += bytes_amount
percentage = (self._seen_so_far / self._size) * 100
sys.stdout.write(
"\r%s %s / %s (%.2f%%)" % (
self._filename, self._seen_so_far, self._size,
percentage))
sys.stdout.flush()
8.获取bucket下文件列表
object_list = s3_client.list_objects(Bucket='bucket名称')
print object_list
9.查看bucket下的某个文件信息
object_info = s3_client.get_object(Bucket='bucket名称', Key='文件对应的key名称')
print object_info
10.删除文件
object_delete = s3_client.delete_object(Bucket='bucket名称', Key='文件对应的key名称')
11.下载文件
s3_client.download_file("bucket名称", "文件对应的key名称", "文件下载到的地址")
或者
s3client.download_file("bucket名称", "文件对应的key名称", "文件下载到的地址",Callback=DownloadProgressPercentage("文件下载到的地址"))
Callback属性对应的类方法如下,该类方法在控制台中打印了下载文件的进度
class _DownloadProgressPercentage(object):
def __init__(self, filename):
self._filename = filename
self._seen_so_far = 0
self._lock = threading.Lock()
def __call__(self, bytes_amount):
# To simplify we'll assume this is hooked up
# to a single filename.
with self._lock:
self._seen_so_far += bytes_amount
sys.stdout.write(
"\r%s --> %s bytes transferred" % (
self._filename, self._seen_so_far))
sys.stdout.flush()
参考文档
boto3 api官方文档:http://boto3.readthedocs.io/en/latest/guide/quickstart.html
1.s3的client的api
2.s3的client的api上传下载示例
二、3 api使用java版
1.在pom.xml中增加依赖包
<dependency>
<groupId>com.amazonaws</groupId>
<artifactId>aws-java-sdk</artifactId>
<version>1.7.3</version>
</dependency>
2.java中使用s3的api的demo
package org.jenkinsci.plugins.s3_step;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.URL;
import java.security.SecureRandom;
import java.util.ArrayList;
import java.util.List;
import com.amazonaws.ClientConfiguration;
import com.amazonaws.auth.AWSCredentials;
import com.amazonaws.auth.BasicAWSCredentials;
import com.amazonaws.regions.Region;
import com.amazonaws.regions.Regions;
import com.amazonaws.services.s3.AmazonS3;
import com.amazonaws.services.s3.AmazonS3Client;
import com.amazonaws.services.s3.model.AbortMultipartUploadRequest;
import com.amazonaws.services.s3.model.Bucket;
import com.amazonaws.services.s3.model.BucketPolicy;
import com.amazonaws.services.s3.model.CannedAccessControlList;
import com.amazonaws.services.s3.model.C