首先從阿里雲官網下載OSS的.NET SDK,然后在項目中添加引用Aliyun.OSS.dll
本例為分片上傳方式,適用於上傳比較大的文件。
引入命名空間:
using Aliyun.OSS; using Aliyun.OSS.Common;
定義阿里雲OSS接口參數:
private string AccessKeyId = "xxx"; //阿里雲AccessKeyId private string AccessKeySecret = "xxx"; //阿里雲AccessKeySecret private string OssEndpoint = "http://oss-cn-xxx.aliyuncs.com"; //阿里雲Endpoint private string OssBucket = "xxx"; //阿里雲Bucket private static OssClient aliyunclient; //阿里雲OSS連接對象 static int partSize = 50 * 1024 * 1024; //分片上傳大小
創建阿里雲OSS客戶端連接:
aliyunclient = new OssClient(this.OssEndpoint, this.AccessKeyId, this.AccessKeySecret);
分片上傳文件:
string remotefile = "path/to/aliyun/test.mp4"; //阿里雲上目標文件 string localfile = "D:\\test.mp4"; //要上傳的本地文件 try { var uploadId = InitiateMultipartUpload(this.OssBucket, remotefile); var partETags = UploadParts(this.OssBucket, remotefile, localfile, uploadId, partSize); CompleteUploadPart(this.OssBucket, remotefile, uploadId, partETags); bool doesexist = aliyunclient.DoesObjectExist(this.OssBucket, remotefile); if (doesexist) { this.logtext = "上傳成功。"; } else { this.logtext = "上傳失敗。"; } } catch (OssException ex) { this.logtext = "上傳失敗," + ex.Message + "。"; }
分片上傳函數定義:
private static string InitiateMultipartUpload(String bucketName, String objectName) { var request = new InitiateMultipartUploadRequest(bucketName, objectName); var result = aliyunclient.InitiateMultipartUpload(request); return result.UploadId; } private static List<PartETag> UploadParts(String bucketName, String objectName, String fileToUpload, String uploadId, int partSize) { var fi = new FileInfo(fileToUpload); var fileSize = fi.Length; var partCount = fileSize / partSize; if (fileSize % partSize != 0) { partCount++; } var partETags = new List<PartETag>(); using (var fs = File.Open(fileToUpload, FileMode.Open)) { for (var i = 0; i < partCount; i++) { var skipBytes = (long)partSize * i; fs.Seek(skipBytes, 0); var size = (partSize < fileSize - skipBytes) ? partSize : (fileSize - skipBytes); var request = new UploadPartRequest(bucketName, objectName, uploadId) { InputStream = fs, PartSize = size, PartNumber = i + 1 }; var result = aliyunclient.UploadPart(request); partETags.Add(result.PartETag); } } return partETags; } private static 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 aliyunclient.CompleteMultipartUpload(completeMultipartUploadRequest); }
注意事項:
阿里雲上目標文件路徑開頭不能是“/”
