C#调用阿里云OSS上传文件(分片)
首先从阿里云官网下载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); }
注意事项:
阿里云上目标文件路径开头不能是“/”
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
2013-09-16 此计算机当前已将连接限制