using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using Aliyun;
using Aliyun.OSS;
using System.IO;
using Aliyun.OSS.Util;
using System.Threading;
using System;
public class Oss : MonoBehaviour {
public static string AccessKeyId = "LTAItV0o2Sdv9hdN";
public static string AccessKeySecret = "6y6lD9r0D0YEKNrkkWW0T80tEVc48G";
public static string Endpoint = "oss-cn-beijing.aliyuncs.com";
public static string DirToDownload = @"C:\Users\Aidenxl\Desktop\";
public static string FileToUpload = @"C:\Users\Aidenxl\Desktop\ScreenLogger.cs";
public static string BigFileToUpload = @"C:\Users\Aidenxl\Desktop\DefendToy.rar";
public static string ImageFileToUpload = "<your local image file to upload>";
public static string CallbackServer = "<your callback server uri>";
static OssClient client = null;
// Use this for initialization
void Start () {
client = new OssClient(Endpoint,AccessKeyId,AccessKeySecret);
// CreateBucket("wuzhenye");
// ListAllBuckets();
// UpdateString("aidenxl","aa.txt");
// UpdateFile("aidenxl", "ScreenLogger.cs", "C:\\Users\\Aidenxl\\Desktop\\ScreenLogger.cs");
// UpdateFileWithMd5("aidenxl", "ScreenLogger.cs","C:\\Users\\Aidenxl\\Desktop\\ScreenLogger.cs");
// CreatFileDir("aidenxl", "yourfolder/");
// UpdateFileAsyn("aidenxl","df.rar" ,"C:\\Users\\Aidenxl\\Desktop\\DefendToy.rar");
//PutObjectProgress("aidenxl","kkk.rar" ,"C:\\Users\\Aidenxl\\Desktop\\DefendToy.rar");
}
Thread thread1;
// Update is called once per frame
void Update () {
if (Input.GetKeyUp(KeyCode.D))
{
//GetObject("aidenxl","555.jpg", "C:\\Users\\Aidenxl\\Desktop\\666.jpg");
}
if (Input.GetKeyUp(KeyCode.K))
{
Debug.Log("下载");
thread1 = new Thread(new ThreadStart(Thread1));
thread1.Start();
}
}
//创建存储包
public void CreateBucket(string bucketName)
{
try
{
client.CreateBucket(bucketName);
Debug.Log("创建成功~");
}
catch (System.Exception ex)
{
Debug.Log(ex);
Debug.Log("创建失败");
}
}
//获取所有存储包
public void ListAllBuckets()
{
try
{
var buckets = client.ListBuckets();
foreach (var item in buckets)
{
Debug.Log("包名:"+item.Name);
}
}
catch (System.Exception ex)
{
Debug.Log(ex);
}
}
//上传字符串txt文件
public void UpdateString(string BucketName, string FileName)
{
try
{
string str = "a line of simple text";
byte[] binaryData = System.Text.Encoding.ASCII.GetBytes(str);
MemoryStream requestContent = new MemoryStream(binaryData);
client.PutObject(BucketName, FileName, requestContent);
Debug.Log("上传字符串成功~");
}
catch (System.Exception ex)
{
Debug.Log(ex);
Debug.Log("上传字符串失败~");
}
}
/// <summary>
/// 上传文件
/// </summary>
/// <param name="BucketName">包名</param>
/// <param name="FileName">文件名</param>
/// <param name="UpdateFilePath">上传文件路径</param>
public void UpdateFile(string BucketName,string FileName, string UpdateFilePath)
{
try
{
client.PutObject(BucketName, FileName, UpdateFilePath);
Debug.Log("Put object succeeded");
}
catch (System.Exception ex)
{
Debug.Log(ex);
Debug.Log("上传文件失败~");
}
}
/// <summary>
/// 上传文件带MD5校验
/// </summary>
/// <param name="BucketName">包名</param>
/// <param name="FileName">文件名</param>
/// <param name="UpdateFilePath">上传路径</param>
public void UpdateFileWithMd5(string BucketName,string FileName,string UpdateFilePath)
{
try
{
string md5;
using (var fs = File.Open(UpdateFilePath, FileMode.Open))
{
md5 = OssUtils.ComputeContentMd5(fs, fs.Length);
}
var objectMeta = new ObjectMetadata
{
ContentMd5 = md5
};
client.PutBigObject(BucketName, FileName,FileToUpload,objectMeta);
Debug.Log("Put object succeeded");
}
catch (System.Exception ex)
{
Debug.Log(ex);
Debug.Log("上传文件失败~");
}
}
/// <summary>
/// 创建文件夹
/// </summary>
/// <param name="BucketName">包名</param>
/// <param name="DirName">文件夹</param>
public void CreatFileDir(string BucketName, string DirName)
{
try
{
// const string key = "yourfolder/";
using (var stream=new MemoryStream())
{
client.PutObject(BucketName, DirName, stream);
Debug.Log("建立成功~");
}
}
catch (System.Exception ex)
{
Debug.Log(ex);
Debug.Log("创建失败~");
}
}
//----------------------------------------------异步上传,有回调结果-----------------------------------------------------
static AutoResetEvent _event = new AutoResetEvent(false);
public void UpdateFileAsyn(string BucketName, string FileName, string UpdateFilePath)
{
try
{
using (var fs = File.Open(UpdateFilePath, FileMode.Open))
{
var metadata = new ObjectMetadata();
metadata.CacheControl = "No-Cache";
metadata.ContentType = "text/html";
client.BeginPutObject(BucketName, FileName, fs, metadata, PutObjectCallback, new string('a', 8));
_event.WaitOne();
}
}
catch (System. Exception ex)
{
Debug.Log("Put object failed, {0}"+ ex);
}
}
private static void PutObjectCallback(IAsyncResult ar)
{
try
{
var result = client.EndPutObject(ar);
Debug.Log("ETag:{0}"+ result.ETag);
Debug.Log("User Parameter:"+ ar.AsyncState as string);
Debug.Log("Put object succeeded");
}
catch (Exception ex)
{
Debug.Log("Put object failed, {0}"+ ex);
}
finally
{
_event.Set();
}
}
//---------------------------------------------------------------------------------------------
//初始化分片上传请求
public void MultipartUpload(string BucketName, string FileName )
{
try
{
var request = new InitiateMultipartUploadRequest(BucketName, FileName);
var result = client.InitiateMultipartUpload(request);
Debug.Log("上传成功~");
}
catch (Exception ex )
{
Debug.Log(ex);
}
}
public void UploadPart(string BucketName,string FileName,string id, string UpdateFilePath)
{
long partSize = 100;
//计算片数
var fi = new FileInfo(UpdateFilePath);
var fileSize = fi.Length;
var partCount = fileSize / partSize;
if (fileSize % partCount != 0)
{
partCount++;
}
//开始分片上传
try
{
var partETags = new List<PartETag>();
using (var fs = File.Open(UpdateFilePath, FileMode.Open))
{
for (var i = 0; i < partCount; i++)
{
var skipBytes = (long)partSize * i;
//定位到本次上传片应该开始的位置
fs.Seek(skipBytes, 0);
//计算本次上传的片大小,最后一片为剩余的数据大小,其余片都是part size大小。
var size = (partSize < fileSize - skipBytes) ? partSize : (fileSize - skipBytes);
var request = new UploadPartRequest(BucketName, FileName, id)
{
InputStream = fs,
PartSize = size,
PartNumber = i + 1
};
//调用UploadPart接口执行上传功能,返回结果中包含了这个数据片的ETag值
var result = client.UploadPart(request);
partETags.Add(result.PartETag);
}
Console.WriteLine("Put multi part upload succeeded");
}
try
{
var completeMultipartUploadRequest = new CompleteMultipartUploadRequest(BucketName, FileName, id);
foreach (var partETag in partETags)
{
completeMultipartUploadRequest.PartETags.Add(partETag);
}
var result = client.CompleteMultipartUpload(completeMultipartUploadRequest);
Console.WriteLine("complete multi part succeeded");
}
catch (Exception ex)
{
Console.WriteLine("complete multi part failed, {0}", ex.Message);
}
}
catch (Exception ex)
{
Console.WriteLine("Put multi part upload failed, {0}", ex.Message);
}
}
/// <summary>
/// 断点上传
/// </summary>
/// <param name="bucketName"></param>
/// <param name="key"></param>
/// <param name="fileToUpload"></param>
/// <param name="checkpointDir"></param>
public static void ResumableUploadObject(string bucketName, string key, string fileToUpload, string checkpointDir)
{
try
{
client.ResumableUploadObject(bucketName, key, fileToUpload, null, checkpointDir);
Console.WriteLine("Resumable upload object:{0} succeeded", key);
}
catch (Exception ex)
{
Console.WriteLine("Resumable upload object failed, {0}", ex.Message);
}
}
public static void PutObjectProgress(string bucketName,string FileName, string fileToUpload)
{
try
{
using (var fs = File.Open(fileToUpload, FileMode.Open))
{
var putObjectRequest = new PutObjectRequest(bucketName, FileName, fs);
putObjectRequest.StreamTransferProgress += streamProgressCallback;
client.PutObject(putObjectRequest);
}
//Console.WriteLine("Put object:{0} succeeded", FileName);
}
catch (Exception ex)
{
Debug.Log(ex);
}
}
private static void streamProgressCallback(object sender, StreamTransferProgressArgs args)
{
Debug.Log("进度: "+ (int)(((long)args.TransferredBytes/(float )args.TotalBytes)*100));
}
public void GetObject(string bucketName, string FileName, string fileToDownload)
{
try
{
var objects = client.GetObject(bucketName, FileName);
using (var requestStream = objects.Content)
{
byte[] buf = new byte[1024];
var fs = File.Open(fileToDownload, FileMode.OpenOrCreate);
var len = 0;
while ((len = requestStream.Read(buf, 0, 1024)) != 0)
{
fs.Write(buf, 0, len);
}
fs.Close();
}
Debug.Log("下载文件成功");
}
catch (Exception ex)
{
// Console.WriteLine("Get object failed"+ ex.Message);
Debug.Log("下载文件失败~");
}
}
public static void GetObjectProgress(string bucketName,string FileName,string fileToDownload)
{
try
{
// client.PutObject(bucketName, FileName, FileToUpload);
var getObjectRequest = new GetObjectRequest(bucketName, FileName);
getObjectRequest.StreamTransferProgress += streamProgressCallback;
var ossObject = client.GetObject(getObjectRequest);
using (var requestStream = ossObject.Content)
{
byte[] buf = new byte[1024];
var fs = File.Open(fileToDownload, FileMode.OpenOrCreate);
var len = 0;
while ((len = requestStream.Read(buf, 0, 1024)) != 0)
{
fs.Write(buf, 0, len);
}
fs.Close();
}
Debug.Log("下载成功");
}
catch (Exception ex)
{
Debug.Log("下载失败"+ex);
}
}
private static void StreamProgressCallback(object sender, StreamTransferProgressArgs args)
{
Debug.Log("下载进度: " + (int)(((long)args.TransferredBytes / (float)args.TotalBytes) * 100));
}
public void DownLoadFile(string BucketName,string FileName)
{
ObjectMetadata tmpMetadata = client.GetObjectMetadata(BucketName, FileName);
Debug.Log(tmpMetadata.ContentLength);
}
static void Thread1()
{
GetObjectProgress("aidenxl", "xLua-master.zip", "C:\\Users\\Aidenxl\\Desktop\\sssss.zip");
}
private void OnDestroy()
{
//thread1.Abort();
}
}
存储服务器使用
最新推荐文章于 2021-11-26 11:58:54 发布