在C#项目中实现文件上传到CDN,通常需要先将文件推送到对象存储服务作为源站,再绑定CDN加速域名。阿里云OSS和腾讯云COS是国内常用的对象存储产品,下面分别介绍两种场景的实现方式。

一、C#上传文件到阿里云OSS
1. 准备工作
首先需要在阿里云控制台创建OSS存储空间,获取AccessKeyId、AccessKeySecret以及Endpoint信息,然后在C#项目中安装官方SDK,通过NuGet执行以下命令安装:
Install-Package Aliyun.OSS.SDK
2. 上传实现代码
以下是本地文件上传到阿里云OSS的完整示例代码:
using Aliyun.OSS;
using System;
using System.IO;
public class AliyunOssHelper
{
// 配置信息,替换为自己的实际信息
private static string accessKeyId = "你的AccessKeyId";
private static string accessKeySecret = "你的AccessKeySecret";
private static string endpoint = "oss-cn-beijing.aliyuncs.com"; // 替换为对应区域的Endpoint
private static string bucketName = "你的存储空间名称";
/// <summary>
/// 上传本地文件到阿里云OSS
/// </summary>
/// <param name="localFilePath">本地文件路径</param>
/// <param name="objectKey">OSS中的文件键名</param>
public static void UploadToOss(string localFilePath, string objectKey)
{
// 创建OSS客户端实例
var client = new OssClient(endpoint, accessKeyId, accessKeySecret);
try
{
// 执行上传操作
client.PutObject(bucketName, objectKey, localFilePath);
Console.WriteLine($"文件上传成功,OSS路径:{objectKey}");
}
catch (Exception ex)
{
Console.WriteLine($"上传失败,错误信息:{ex.Message}");
}
}
}
// 调用示例
class Program
{
static void Main(string[] args)
{
string localFile = @"D:testimage.jpg";
string ossKey = "uploads/image.jpg";
AliyunOssHelper.UploadToOss(localFile, ossKey);
}
}
3. 关联CDN加速
上传完成后,在阿里云CDN控制台添加加速域名,源站类型选择OSS域名,填写对应的OSS存储空间访问域名,配置完成后将加速域名解析到CDN分配的CNAME地址,即可通过CDN域名访问上传的文件。
二、C#上传文件到腾讯云COS
1. 准备工作
在腾讯云控制台创建COS存储桶,获取SecretId、SecretKey、Region以及存储桶名称,然后通过NuGet安装腾讯云COS的SDK:
Install-Package Tencent.QCloud.Cos.Sdk
2. 上传实现代码
以下是C#上传文件到腾讯云COS的示例代码:
using COSXML;
using COSXML.Auth;
using COSXML.Model.Object;
using COSXML.Model;
using System;
public class TencentCosHelper
{
// 配置信息,替换为自己的实际信息
private static string secretId = "你的SecretId";
private static string secretKey = "你的SecretKey";
private static string region = "ap-beijing"; // 替换为存储桶所在区域
private static string bucket = "你的存储桶名称-APPID"; // 格式为存储桶名称-APPID
/// <summary>
/// 上传本地文件到腾讯云COS
/// </summary>
/// <param name="localFilePath">本地文件路径</param>
/// <param name="cosKey">COS中的对象键</param>
public static void UploadToCos(string localFilePath, string cosKey)
{
// 初始化CosXml配置
CosXmlConfig config = new CosXmlConfig.Builder()
.SetRegion(region)
.Build();
// 初始化凭证提供器
QCloudCredentialProvider cosCredentialProvider = new DefaultQCloudCredentialProvider(secretId, secretKey, 600);
// 创建CosXml客户端
CosXml cosXml = new CosXmlServer(config, cosCredentialProvider);
try
{
// 创建上传对象请求
PutObjectRequest request = new PutObjectRequest(bucket, cosKey, localFilePath);
// 执行上传
PutObjectResult result = cosXml.PutObject(request);
Console.WriteLine($"文件上传成功,COS路径:{cosKey},请求ID:{result.GetRequestId()}");
}
catch (COSXML.CosException.CosClientException clientEx)
{
Console.WriteLine($"客户端异常:{clientEx.Message}");
}
catch (COSXML.CosException.CosServerException serverEx)
{
Console.WriteLine($"服务端异常,错误码:{serverEx.GetErrorCode()},错误信息:{serverEx.GetErrorMessage()}");
}
}
}
// 调用示例
class Program
{
static void Main(string[] args)
{
string localFile = @"D:testdocument.pdf";
string cosKey = "files/document.pdf";
TencentCosHelper.UploadToCos(localFile, cosKey);
}
}
3. 关联CDN加速
在腾讯云CDN控制台添加加速域名,源站类型选择COS,选择对应的存储桶,完成配置后将加速域名的CNAME解析到CDN分配的地址,即可通过CDN域名访问COS中的文件。
三、注意事项
- 上传文件时需要确保本地文件路径正确,且有文件读取权限
- 云存储的访问权限建议根据业务需求配置,公开读权限的文件可以直接通过URL访问,私有文件需要生成带签名的访问链接
- 大文件上传建议使用分片上传方式,避免单次上传超时失败,两个云厂商的SDK都提供了分片上传的对应接口
- CDN缓存规则需要根据文件更新频率合理配置,避免文件更新后无法及时生效