阿里云OSS存储开发(一)
Step 1. 初始化一个OSSClient
OSSClient是与OSS服务交互的客户端,SDK的OSS操作都是通过OSSClient完成的。
下面代码新建了一个OSSClient:
using Aliyun.OpenServices.OpenStorageService;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks; namespace AliyunTest
{
class Program
{
static readonly string accessKeyId = "AccessKeyId";
static readonly string accessKeySecret = "AccessKeySecret";
//关于这个endPoint,可以参考:http://bbs.aliyun.com/read/149100.html?spm=5176.7189909.0.0.YiwiFw
static readonly string endPoint = "http://oss-cn-beijing.aliyuncs.com"; static void Main(string[] args)
{
//初始化 OSSClient
OssClient ossClient = new OssClient(endPoint, accessKeyId, accessKeySecret); //使用代码...
}
}
}
在上面代码中,变量 accessKeyId 与 accessKeySecret 是由系统分配给用户的,称为ID对,用于标识用户,为访问OSS做签名验证。
Step 2. 新建Bucket
Bucket是OSS上的命名空间,相当于数据的容器,可以存储若干数据实体(Object)。
你可以按照下面的代码新建一个Bucket:
/// <summary>
/// 新建存储对象容器Bucket
/// </summary>
/// <param name="bucketName">容器名称</param>
void CreateBucket(string bucketName)
{
//初始化 OSSClient
OssClient ossClient = new OssClient(endPoint, accessKeyId, accessKeySecret); // 新建一个Bucket
var bucket = ossClient.CreateBucket(bucketName); Console.WriteLine(bucket.CreationDate);
}
由于Bucket的名字是全局唯一的,所以尽量保证你的 bucketName 不与别人重复。
其实也可以在阿里云的OSS管理控制台创建。
Step 3. 上传Object
Object是OSS中最基本的数据单元,你可以把它简单地理解为文件,用下面代码可以实现一个Object的上传:
/// <summary>
/// 进行对象存储
/// </summary>
/// <param name="bucketName">bucket名称</param>
void PutObject(string bucketName)
{
//初始化 OSSClient
OssClient ossClient = new OssClient(endPoint, accessKeyId, accessKeySecret); //定义文件流
var objStream = new System.IO.FileStream("D:\\example\\test.jpg", System.IO.FileMode.OpenOrCreate);
//定义 object 描述
var objMetadata = new ObjectMetadata();
var objKey = "test.jpg"; //执行 put 请求,并且返回对象的MD5摘要。
var putResult = ossClient.PutObject(bucketName, objKey, objStream, objMetadata); Console.WriteLine(putResult.ETag);
}
Object通过InputStream的形式上传到OSS中。在上面的例子里我们可以看出,每上传一个Object,都需要指定和Object关 联的ObjectMetadata。ObjectMetaData是用户对该object的描述,由一系列name-value对组成;其中 ContentLength是必须设置的,以便SDK可以正确识别上传Object的大小。
Put Object请求处理成功后,OSS会将收到文件的MD5值放在返回结果的ETag中。用户可以根据ETag检验上传的文件与本地的是否一致。
Step 4. 获取指定Objec
/// <summary>
/// 获取一个存储对象
/// </summary>
/// <param name="bucketName">bucket名称</param>
/// <param name="objKey">对象标识名称</param>
void GetObject(string bucketName, string objKey)
{
//初始化 OSSClient
OssClient ossClient = new OssClient(endPoint, accessKeyId, accessKeySecret); //获取对象
var obj = ossClient.GetObject(bucketName, objKey);
//获取Object的输入流
var objStream = obj.Content; //怎么处理数据流,您看着办吧。
//... //最后关闭数据流。
objStream.Close();
}
最终文件怎么访问呢?你猜(上阿里云的管理控制台看看你就知道了)...
阿里云OSS存储开发(一)的更多相关文章
- 前端(react)上传到阿里云OSS存储 实例
需求背景 由于现有的后台管理系统,上传的视频越来越大,加上上传视频较慢,后端小哥提出直接从前端上传视频或者其他文件到阿里云OSS存储. 阿里云OSS 阿里云OSS文档介绍,这里不做过多赘述 安装 原本 ...
- php将图片存储在阿里云oss存储上
创建两个方法 1.上传方法 use OSS\OssClient; use think\Config; use OSS\Core\OssException; /** * 存储文件 * * @param ...
- 备份MySQL数据库并上传到阿里云OSS存储
1. 环境配置 要将本地文件上传到阿里云oss中, 必须使用阿里云提供的工具 ossutil, 有32位,也有64位的, Linux和Windows都有.具体可以到阿里云官网下载 官网及文档: htt ...
- 谷粒 | 10 | 阿里云OSS存储对象服务
阿里云OSS对象存储服务 准备工作 1.在service模块新建子模块service_oss 2.引入pom.xml文件中引入oss服务依赖 <dependencies> <!--a ...
- Laravel 使用阿里云 oss 存储对象
一.下载安装 composer require jacobcyl/ali-oss-storage 二.注册服务提供者 在config/app.php的providers下添加: //阿里云OSS对象存 ...
- Java项目接入阿里云OSS存储
需求背景 目前公司内部项目所支持的文件云存储方式还是公司内部项目组提供的方案,但在时间的考验之下,弊端显现,尤其是灾备切换过程中需要切换访问地址,这种操作不方便,更可能因为中间过程的失误导致资源不可用 ...
- 阿里云OSS存储
1.accessKeyId 与 accessKeySecret 是由系统分配给用户的,称为ID对,用于标识用户,为访问OSS做签名验证. 2.Bucket是OSS上的命名空间,相当于数据的容器,可以存 ...
- 阿里云OSS存储前端API上传(签名上传)
一.创建用户 在阿里云创建用户https://ram.console.aliyun.com/users,并勾选Open API 保存好信息,很重要,返回后就再也找不到了 新增授权(这里视个人情况,需要 ...
- jeesz分布式架构集成阿里云oss存储
1. 服务接口定义 /** * 文件上传 1:头像 2:显示图片 3:个人封面 :4:基础图片 * @param request * @param response * @param ...
随机推荐
- MFC 如何改变对话框按钮上的文字
原文地址:http://blog.163.com/wenxianliang08@126/blog/static/8358326320110300643282/ 什么是标记菜单 如何标记菜单 如何 ...
- SKYLINE
uvalive4108:https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&pag ...
- PYTHON之批量文件指定字符串替换
在工作应用中,运维自动化的基础是标准化. 而标准化的工作,是难点,在公司相关部门的配合. 那么,在有标准化之后,相应的部署脚本,就比较好写了. 贡献一个在类似环境下可以运用的东东.. 当然,可以写得更 ...
- Struts2 cookie的存取
/** * Cookieの追加 * @return * @throws Exception */ private void addCookie(String name,String value){ C ...
- fdisk磁盘分区
http://www.cr173.com/html/4336_1.html http://www.51cto.com/art/200602/20328.htm
- -_-#【CSS】注释
- ab压测 apr_socket_recv: Connection reset by peer (104)错误解决方法
用apache自带ab命令进行压测,报了如下错误: 原因是在ab的程序源码中对并发数有限制. 解决办法:修改apache源码support下面的ab.c源代码,然后重新编译.修改内容如下:
- 总结linux无线命令wpa
关于wpa_supplicant: 用到wpa_cli命令 wpa_cli -iwlan0 add_network // wlan0 是无线网络设备的名字,增加一个网络,会返回 ...
- 数据结构(括号序列,线段树||点分治,堆):ZJOI 2007 捉迷藏
[题目描述] Jiajia和Wind是一对恩爱的夫妻,并且他们有很多孩子.某天,Jiajia.Wind和孩子们决定在家里玩捉迷藏游戏.他们的家很大且构造很奇特,由N个屋子和N-1条双向走廊组成,这N- ...
- 什么是左值(what is a lvalue)?
引用并翻译自<C++ premier plus> 左值是可以通过地址引用的数据对象(data object),例如,变量,数组的元素,结构体的成员,引用变量,以及复引用的指针(defere ...