C#调用阿里云OSS SDK上传文件
在C#中使用阿里云OSS SDK上传资源到阿里云对象存储(OSS)可以通过以下步骤实现。首先,确保已经安装阿里云OSS SDK。你可以使用NuGet包管理器或者.NET CLI执行安装:
dotnet add package Aliyun.SDK.OSS
或者通过NuGet包管理器控制台执行:
Install-Package Aliyun.SDK.OSS
然后,你可以使用以下示例代码上传资源:
using System;
using System.IO;
using Aliyun.OSS;
using Aliyun.OSS.Common;
class Program
{
static void Main()
{
// 阿里云账号 Access Key ID 和 Access Key Secret
string accessKeyId = "YourAccessKeyId";
string accessKeySecret = "YourAccessKeySecret";
// 创建 OSS 客户端实例
var client = new OssClient("YourEndpoint", accessKeyId, accessKeySecret);
// 上传文件
string bucketName = "YourBucketName";
string objectKey = "YourObjectName";
string localFilePath = "PathToLocalFile";
try
{
using (var fs = File.Open(localFilePath, FileMode.Open))
{
var metadata = new ObjectMetadata();
var result = client.PutObject(bucketName, objectKey, fs, metadata);
Console.WriteLine($"ETag: {result.ETag}");
}
Console.WriteLine("File uploaded successfully.");
}
catch (OssException ex)
{
Console.WriteLine($"Failed to upload file. Error code: {ex.ErrorCode}, Message: {ex.Message}");
}
catch (Exception ex)
{
Console.WriteLine($"An unexpected error occurred: {ex.Message}");
}
}
}
请注意替换代码中的以下信息:
YourAccessKeyId 和 YourAccessKeySecret:你的阿里云账号的 Access Key ID 和 Access Key Secret。
YourEndpoint:你的 OSS 服务的 endpoint,如 http://oss-cn-hangzhou.aliyuncs.com。
YourBucketName:要上传到的存储桶的名称。
YourObjectName:上传到OSS的对象名称。
PathToLocalFile:本地文件的路径。
如果你希望上传文件夹中的所有资源到阿里云OSS,你可以使用Directory.GetFiles方法获取文件夹中的所有文件,然后循环上传每个文件。以下是一个示例代码:
using System;
using System.IO;
using System.Linq;
using Aliyun.OSS;
using Aliyun.OSS.Common;
class Program
{
static void Main()
{
// 阿里云账号 Access Key ID 和 Access Key Secret
string accessKeyId = "YourAccessKeyId";
string accessKeySecret = "YourAccessKeySecret";
// 创建 OSS 客户端实例
var client = new OssClient("YourEndpoint", accessKeyId, accessKeySecret);
// 上传文件夹中的所有资源
string bucketName = "YourBucketName";
string folderPath = "PathToLocalFolder";
try
{
var files = Directory.GetFiles(folderPath);
foreach (var filePath in files)
{
var objectKey = Path.GetFileName(filePath);
using (var fs = File.Open(filePath, FileMode.Open))
{
var metadata = new ObjectMetadata();
var result = client.PutObject(bucketName, objectKey, fs, metadata);
Console.WriteLine($"Uploaded {objectKey}. ETag: {result.ETag}");
}
}
Console.WriteLine("All files uploaded successfully.");
}
catch (OssException ex)
{
Console.WriteLine($"Failed to upload files. Error code: {ex.ErrorCode}, Message: {ex.Message}");
}
catch (Exception ex)
{
Console.WriteLine($"An unexpected error occurred: {ex.Message}");
}
}
}
Unity中使用Oss Sdk上传资源
将Aliyun.OSS放到Unity的plugins文件夹下
public class OSSFolderUploaderEditor: EditorWindow
{
// 在Inspector窗口中设置你的OSS信息
public string accessKeyId = "YourAccessKeyId";
public string accessKeySecret = "YourAccessKeySecret";
public string endpoint = "https://oss-cn-shanghai.aliyuncs.com";
public string bucketName = "YourBucketName";
public string ossDirectory = "YourossDirectory /{0}/StreamingAssets"; // 目标目录
// 设置本地文件夹路径
string localFolderPath = "";
private void OnGUI()
{
if (GUILayout.Button("上传资源"))
{
Start();
}
}
public void Start()
{
Debug.Log("开始上传");
// 初始化OSS客户端
var config = new ClientConfiguration();
var client = new OssClient(endpoint, accessKeyId, accessKeySecret, config);
long size = 0;
// 获取文件夹中的所有文件
string[] filePaths = Directory.GetFiles(localFolderPath);
foreach (var filePath in filePaths)
{
// 获取文件名
string objectKey = ossDirectory + "/" + Path.GetFileName(filePath);
// 打开文件并将其内容读取到Stream
using (FileStream fs = new FileStream(filePath, FileMode.Open))
{
size += fs.Length;
// 创建上传请求
var putObjectRequest = new PutObjectRequest(bucketName, objectKey, fs);
try
{
// 执行上传
client.PutObject(putObjectRequest);
Debug.Log("File uploaded successfully: " + objectKey);
}
catch (OssException ex)
{
Debug.LogError("Failed to upload file. Error: " + ex.ErrorCode + " - " + ex.Message);
}
catch (System.Exception ex)
{
Debug.LogError("Failed to upload file. Error: " + ex.Message);
}
}
}
Debug.Log($"资源上传完成:{TextFromBytesSize(size)}");
}
public string GetPlatformName(BuildTarget buildTarget)
{
switch (buildTarget)
{
case BuildTarget.Android:
return "Android";
case BuildTarget.iOS:
return "IOS";
default:
return "PC";
}
}
public string TextFromBytesSize(long size_num)
{
long data_size = size_num;
if (data_size < 1024)
{
// B
return data_size + "B";
}
if (data_size / 1024 < 1024)
{
// KB
return String.Format("{0:F2}KB", data_size / 1024f);
}
data_size /= 1024;
if (data_size / 1024 < 1024)
{
// MB
return String.Format("{0:F2}MB", data_size / 1024f);
}
data_size /= 1024;
// G
return String.Format("{0:F2}G", data_size / 1024f);
}