進入正題前先說一下我遇到的問題:
①: 這是因為本地時間與伺服器時差太大的原因 --你可檢查一下你的本地時區,(阿裡的程式猿竟突讓我換個接口試試!)
②: 我在從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);
}
}
第一次寫 還望各位大蝦 多多指教!感謝洋哥的指導
