存储服务器使用

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();
    }


 


}

猜你喜欢

转载自blog.csdn.net/weixin_37744986/article/details/80579597
今日推荐