javascript sdk javascript sdk 列出 Bucket 内的对象上传 textarea 内容到 Bucket 上传本地文件生成私有下载链接生成带过期时间的私有链接删除对象下载对象拷贝对象查看文件访问权限设置文件访问权限获取静态网站配置设置静态网站删除静态网站查询对象元数据查询桶的多版本 Bucket 开启对象多版本支持挂起 Bucket 的多版本对象功能浏览器客户端浏览器客户端的 javascipt sdk 相比于服务端版本的 nodejs sdk, 由于涉及到跨域访问的问题 (CORS), 因此想使用浏览器端的 javascript sdk, 需要先创建桶并设置 Bucket 的 CORS 后才可以进行上传下载操作, 并不能使用服务端版本的 javascript sdk 的所有功能 多数据中心 : 数据中心 Endpoint http://eos beijing 1.cmecloud.cn http://eos beijing 2.cmecloud.cn 对应 Location 值 beijing1 beijing2
创建桶的时候指定桶要创建在的区域, 比如要创建的桶要在 beijing1 数据中心的话, 桶的请求的 Endpoint 要写 http://eos-beijing-1.cmecloud.cn,createbucketconfiguration= { LocationConstraint : beijing1, 创建的桶要在 beijing2 数据中心的话, 桶的请求的 Endpoint 要写 http://eos-beijing-2.cmecloud.cn,createbucketconfiguration= { LocationConstraint : beijing2, 设置桶的属性如多版本,ACL, 静态网站, 防盗链, 上传数据到桶, 下载桶内对象的时候, 桶在哪个数据中心, 请求的 Endpoint 就写哪个数据中心 不管在哪个数据中心, 用户都能获得用户的桶列表 (list_buckets) 和桶所在的数据中心 (get_bucket_location) 跨域访问 Bucket 的配置文件 cors.xml 示例 <?xml version="1.0" encoding="utf-8"?> <CORSConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/"> <CORSRule> <AllowedOrigin>*</AllowedOrigin> <AllowedMethod>POST</AllowedMethod> <AllowedMethod>GET</AllowedMethod> <AllowedMethod>PUT</AllowedMethod> <AllowedMethod>DELETE</AllowedMethod> <AllowedMethod>HEAD</AllowedMethod> <AllowedHeader>*</AllowedHeader> </CORSRule> </CORSConfiguration> 使用 s3cmd 设置桶的 CORS # 安装 s3cmd pip install s3cmd # 设置 CORS s3cmd setcors cors.xml s3://{ 桶的名字 列出 Bucket 内的对象 listobject.html
<ul id="objects"></ul>, sslenabled: false Bucket: " 桶的名字 ", MaxKeys: 100 # 最多返回 100 个对象 s3.listobjects(params, function(err, data) { 'Could not load objects from S3'; 'Loaded ' + data.contents.length + ' items from S3'; for (var i = 0; i < data.contents.length; i++) { document.getelementbyid('objects').innerhtml += '<li>' + data.contents[i].key + '</li>'; 上传 textarea 内容到 Bucket uploadtextarea.html
<textarea id="data"></textarea> <button id="upload-button">upload to S3</button> <div id="results">, sslenabled: false var textarea = document.getelementbyid('data'); var button = document.getelementbyid('upload-button'); var results = document.getelementbyid('results'); button.addeventlistener('click', function() { results.innerhtml = ''; Key: ' 对象名字 ',Bucket: " 桶的名字 ", Body: textarea.v alue s3.putobject(params, function (err, data) { results.innerhtml = err? 'ERROR!' : 'SAVED.';, false); 上传本地文件 uploadchoosefile.html
<input type="file" id="file-chooser" /> <button id="upload-button">upload to S3</button> <div id="results">, sslenabled: false var filechooser = document.getelementbyid('file-chooser'); var button = document.getelementbyid('upload-button'); var results = document.getelementbyid('results'); button.addeventlistener('click', function() { var file = filechooser.files[0]; if (file) { results.innerhtml = ''; Key: file.name,bucket: " 桶的名字 ", ContentType: f ile.type, Body: file s3.putobject(params, function (err, data) { results.innerhtml = err? 'ERROR!' : 'UPLOADED.'; results.innerhtml = 'Nothing to upload.';, false); 生成私有下载链接 getsignedurl.html
<div id="results">, sslenabled: false var results = document.getelementbyid('results'); results.innerhtml = ''; Key: ' 对象名字 ',Bucket: " 桶的名字 " s3.getsignedurl('getobject', params, function (err, url) { results.innerhtml = err? 'ERROR!' : url; 生成带过期时间的私有链接 getsignedurlexpires.html
<div id="results">, sslenabled: false var results = document.getelementbyid('results'); results.innerhtml = ''; Key: ' 对象名字 ',Bucket: " 桶的名字 ",Expires: 60 s3.getsignedurl('getobject', params, function (err, url) { results.innerhtml = err? 'ERROR!' : url; 删除对象 deleteobject.html
Bucket: " 桶的名字 ", Key: " 对象名字 " s3.deleteobject(params, function(err, data) { 下载对象 getobjectrange.html
<ul id="objects"></ul> # 获取对象的前 3 个字节 s3.getobject({bucket: " 桶的名字 ",Key: " 对象名字 ",Range: "bytes=0-2", function(err, data) { 'ERROR'; 'OK'; console.log(data); # 用户需要自己编写 javascript 代码将该变量保存 拷贝对象 copyobject.html
Bucket: " 桶的名字 ", CopySource: "/ 待拷贝对象所在桶 / 待拷贝对象 ", Key: " 对象名字 " s3.copyobject(params, function(err, data) { 查看文件访问权限 getobjectacl.html
Bucket: " 桶的名字 ", Key: " 对象名字 " s3.getobjectacl(params, function(err, data) { console.log(data); 设置文件访问权限 setobjectacl.html
Bucket: " 桶的名字 ", ACL: "public-read", # 设置公共可读 Key: " 对象名字 " s3.putobjectacl(params, function(err, data) { console.log(data); 获取静态网站配置 getwebsite.html
Bucket: " 桶的名字 " s3.getbucketwebsite(params, function(err, data) { console.log(data); 设置静态网站 setwebsite.html
Bucket: "bucket01", WebsiteConfiguration: { ErrorDocument: { Key: "error.html" # 错误页面, IndexDocument: { Suffix: "index.html" # 默认的 index 文件 s3.putbucketwebsite(params, function(err, data) { console.log(data);
删除静态网站 deletewebsite.html Bucket: " 桶的名字 " s3.deletebucketwebsite(params, function(err, data) { console.log(data); 查询对象元数据
headobject.html Bucket: " 桶的名字 ", Key: " 对象名字 " s3.headobject(params, function(err, data) { console.log(data); 查询桶的多版本 getbucketvwersion.html
Bucket: " 桶的名字 " s3.getbucketversioning(params, function(err, data) { console.log(data); Bucket 开启对象多版本支持 enablebucketversion.html
Bucket: " 桶的名字 ", VersioningConfiguration: { Status: "Enabled" s3.putbucketversioning(params, function(err, data) { console.log(data); 挂起 Bucket 的多版本对象功能 suspendbucketversion.html
Bucket: " 桶的名字 ", VersioningConfiguration: { Status: "Suspended" s3.getbucketversioning(params, function(err, data) { console.log(data);