对OSS的操作

进入正题前先说一下我遇到的问题:

①:   这是因为本地时间与服务器时差太大的原因  --你可检查一下你的本地时区,(阿里的程序猿竟突让我换个接口试试!)

②:  我在从OSS上获取图片时因为endpoint缺少一个参数而产生的,

误:http://oss-cn-beijing.aliyuncs.com/developer/2/2.jpg

正:http://oss-cn-beijing.aliyuncs.com/gevek/developer/2/2.jpg

※ ※ ※ ※ ※ ※  coding前首先介绍一下OSS三个基本要素/ bucket  AccessKey   AccessID  Services

1、Bucket :

Bucket是OSS上的命名空间,也是计费、权限控制、日志记录等高级功能的管理实体;Bucket名称在整个OSS服务中具有全局唯一性,且不能修改;存储在OSS上的每个Object必须都包含在某个Bucket中。一个应用,例如图片分享网站,可以对应一个或多个Bucket。一个用户最多可创建10个Bucket,但每个Bucket中存放的Object的数量和大小总和没有限制,用户不需要考虑数据的可扩展性。

2、AccessKey   AccessID :

用户注册OSS时,系统会给用户分配一对Access Key ID和Access Key Secret,称为ID对,用于标识用户,为访问OSS做签名验证。

3、service

OSS提供给用户的虚拟存储空间,在这个虚拟空间中,每个用户可拥有一个到多个Bucket。

在此 给需要的童鞋提供一下 SDK下载链接  http://pan.baidu.com/s/1kTm3sDx

下面进入正题:具体展示三个基本要素的基本使用。一、单文件上传

const string _accessId = "your access ID";

const string _accessKey = " your access Key";

const string _endpoint = "http://oss-cn-(服务器位置).aliyuncs.com";

private static readonly OssClient _ossClient = new OssClient(_endpoint, _accessId, _accessKey);

public bool PutSingleObject(String bucketName, String objectName, String fileToUpload)

{

bool resul = false;

try

{

OssClient client = new OssClient(_endpoint, _accessId, _accessKey);

using (var fs = File.Open(fileToUpload, FileMode.Open))

{

var metadata = new ObjectMetadata();

metadata.UserMetadata.Add("mykey1", "myval1");

metadata.CacheControl = "No-Cache";

metadata.ContentLength = fs.Length;

client.PutObject(bucketName, objectName, fs, metadata);

MessageBox.Show(client.ToString());

}

resul=true;

}

catch (OssException )

{

MessageBox.Show("请检查网络");

resul = false;

Console.WriteLine("Failed with error code: {0}; Error info: {1}. \nRequestID:{2}\tHostID:{3}",

//    ex.ErrorCode, ex.Message, ex.RequestId, ex.HostId);

}

catch (Exception )

{

MessageBox.Show("请检查网络");

resul = false;

// Console.WriteLine("Failed with error info: {0}", ex.Message);

}

return resul;

}

二 、多文件上传 (带进度条) UploadMultipart

public class UploadThread

{    
         public delegate void ShowProgressDelegate(int totalStep, int currentStep);
         private ShowProgressDelegate process_;
         private Control invokeControl_;
         private long totalSize;
         private long currentSize;
         private long currentsizenum;
         public long TotalSize
         {
             get { return totalSize; }
         }
         public long CurrentSize
         {
             get { return this.currentsizenum; }
         }
         public float CurrentProgress
         {
             get
             {
                 if (this.totalSize != 0)
                 {
                     return (float)this.currentsizenum * 100 / (float)this.totalSize;
                 }
                 else
                 {
                     return 0;
                 }
             }
         }
       
         public string UploadMultipart(String bucketName, String objectName, String fileToUpload, int partSize, ShowProgressDelegate prosess, Control t)
         {
             invokeControl_ = t;
             process_ = prosess;
             var uploadId = InitiateMultipartUpload(bucketName, objectName);
             var partETags = UploadParts(bucketName, objectName, fileToUpload, uploadId, partSize);
             var completeResult = CompleteUploadPart(bucketName, objectName, uploadId, partETags);
             return completeResult.BucketName;
         }

private static string InitiateMultipartUpload(String bucketName, String objectName)
         {
             var request = new InitiateMultipartUploadRequest(bucketName, objectName);
             var result = _ossClient.InitiateMultipartUpload(request);
             return result.UploadId;
         }

private List<PartETag> UploadParts(String bucketName, String objectName, String fileToUpload, String uploadId, int partSize)
         {
             var fi = new FileInfo(fileToUpload);
             var fileSize = fi.Length;
             totalSize = fileSize;
             var partCount = fileSize / partSize; 
             if (fileSize % partSize != 0)
             {

partCount++;
             }
             long size = 0;
             var partETags = new List<PartETag>();

for (var i = 0; i < partCount; i++)
             {
                 using (var fs = File.Open(fileToUpload, FileMode.Open))
                 {
                     var skipBytes = (long)partSize * i;
                     fs.Seek(skipBytes, 0);

size = (partSize < fileSize - skipBytes) ? partSize : (fileSize - skipBytes);
                     var request = new UploadPartRequest(bucketName, objectName, uploadId)
                     {
                         InputStream = fs,
                         PartSize = size,
                         PartNumber = i + 1
                     };

var result = _ossClient.UploadPart(request);
                     partETags.Add(result.PartETag);
                     currentSize = size;
                 }
                 currentsizenum += currentSize;
                 object[] objs = new object[] { 100, 0 };
                 objs[1] = (int)CurrentProgress;
                 invokeControl_.Invoke(process_, objs);
             }

return partETags;
         }

private CompleteMultipartUploadResult CompleteUploadPart(String bucketName, String objectName,
             String uploadId, List<PartETag> partETags)
         {
             var completeMultipartUploadRequest =
                 new CompleteMultipartUploadRequest(bucketName, objectName, uploadId);
             foreach (var partETag in partETags)
             {
                 completeMultipartUploadRequest.PartETags.Add(partETag);
             }
             return _ossClient.CompleteMultipartUpload(completeMultipartUploadRequest);
         }
    }

第一次写 还望各位大虾 多多指教!感谢洋哥的指导

时间: 2024-10-19 15:40:37

对OSS的操作的相关文章

阿里云OSS

想将图片存储到阿里云上,尝试着了解了下阿里云的OSS. 文档地址:https://help.aliyun.com/?spm=5176.doc31837.201511181.1.TePvVX .net 版本SDK 的github地址:https://github.com/aliyun/aliyun-oss-csharp-sdk?spm=5176.doc32085.2.4.kSjabk 贴个OSS开通的region 和endpoint 的图,地址:https://help.aliyun.com/do

python2系列 接入阿里云oss sdk 实现上传脚本,亲测

公司图片要从原有的nfs存储上迁移到oss存储上,其实阿里云提供的很多种方式,但是作为一枚运维人员很有必要学会使用ossutil工具,当然接入阿里oss的python的sdk也是很有必要的,下面我就将我写的简单的脚本样例晒一下: #! /usr/bin/env python #! -*- coding:utf8 -*- """ aliyujn oss2 python sdk 上传测试测试!!""" from __future__ import p

laravel下使用阿里云oss上传图片

对小公司而言,使用阿里云oss比直接买硬盘要划算的多,不管从存储性价比上还是从网速负载上.最近因为公司的项目有比较大的图片存储访问需求,所以决定使用阿里云的oss. 在研究了一下以后,摆着不自己造轮子的原则,决定使用AliyunOss,国人laravel高手JohnLui封装的一个阿里云oss的操作库. AliyunOSS 是阿里云 OSS 官方 SDK 的 Composer 封装,支持任何 PHP 项目,包括 Laravel.Symfony.TinyLara 等等.Github 地址:http

使用阿里云OSS上传文件

本文介绍如何利用Java API操作阿里云OSS对象存储. 1.控制台操作 首先介绍一下阿里云OSS对象存储的一些基本概念. 1.1 进入对象存储界面 登录阿里云账号,进入对象存储界面,如图所示. 进入后如图所示. 1.2 OSS基本概念 这里不过多介绍如何在阿里云上传下载文件,这些操作基本上点一点都能找到. 1.2.1 Bucket Bucket实质就是阿里云OSS对象存储的一个存储空间,按照计算机理解的话可以理解为一个磁盘(不知道这样比喻是否恰当). 创建桶的过程很简单,如图所示,填写对应内

阿里云数据库产品HybridDB简介——OLAP数据库,支持行列混合存储,为用户提供基于开源 OLTP、OLAP、BigData 生态的一站式解决方案

12 月 9 日,阿里云宣布数据库产品 HybridDB 正式商业化. HybridDB(ApsaraDB HybridDB)是一款在线 MPP 大规模并行处理数据仓库的服务.它基于 Pivotal 公司的开源数据库项目 Greenplum Database 开发,并由阿里云数据库团队在云计算架构下深度扩展. 该服务支持了 OSS 存储.JSON 数据类型.HyperLogLog 预估分析等功能特性.通过符合 SQL2008 标准查询语法及 OLAP 分析聚合函数,提供灵活的混合分析能力.提供在

Lustre I/O性能特点与最佳实践

1 Lustre概述Lustre是面向集群的存储架构,它是基于Linux平台的开源集群(并行)文件系统,提供与POSIX兼容的文件系统接口.Lustre两个最大特征是高扩展性和高性能,能够支持数万客户端系统.PB级存储容量.数百GB的聚合I/O吞吐量.Lustre是Scale-Out存储架构,借助强大的横向扩展能力,通过增加服务器即可方便扩展系统总存储容量和性能.Lustre的集群和并行架构,非常适合众多客户端并发进行大文件读写的场合,但目前对于小文件应用非常不适用,尤其是海量小文件应用LOSF

aps.net mvc webapi 实现文件或图片上传

前几天看到网上有很多复杂的实现方式,觉得没必要,所以就写个简单的实现. 一:首先来看看Api Controller里面的代码: HttpContext.Current.Request.Files  这是一个文件集合对象,你客户端上载的所有文件都在这个集合当中 图中提供了2种方式获取单个文件对象,你可以按需使用,单个文件可以直接用下标,多个文件用name,例如: HttpPostedFile file =HttpContext.Current.Request.Files[0]; 图中HttpPos

Amazon Redshift数据迁移到MaxCompute

Amazon Redshift 中的数据迁移到MaxCompute中经常需要先卸载到S3中,再到阿里云对象存储OSS中,大数据计算服务MaxCompute然后再通过外部表的方式直接读取OSS中的数据.如下示意图: 前提条件本文以SQL Workbench/J工具来连接Reshift进行案例演示,其中用了Reshift官方的Query editor发现经常报一些奇怪的错误.建议使用SQL Workbench/J. 下载Amazon Redshift JDBC驱动程序,推荐4.2 https://s

函数组合的 N 种模式

随着以函数即服务(Function as a Service)为代表的无服务器计算(Serverless)的广泛使用,很多用户遇到了涉及多个函数的场景,需要组合多个函数来共同完成一个业务目标,这正是微服务"分而治之,合而用之"的精髓所在.本文以阿里云函数计算为例,试图全面介绍函数组合的常见模式和使用场景,希望有助于选择合适的解决方案. 虽然本文主要介绍的是函数组合,但是基本思想也可用于服务组合. 函数同步调用函数 在这种模式里,函数直接调用 InvokeFunction 同步 API