腾讯云Oss直传的第一个案例

第一个案例只考虑用OssSdk把任务ping通就行啦,先不用考虑太多的场景需求。

code here

上传的service Class

using CosOssSdk;
using System.Collections.Concurrent;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;


namespace TensentYunUpload
{
    public class ImageUploadServices
    {
        /// <summary>
        /// 初始化
        /// </summary>
        private static ImageUploadServices _instance;
        //public readonly SqLiteDbUtil _dbUtil = new SqLiteDbUtil();
        public static ConcurrentQueue<string> ImaeUpload_File = new ConcurrentQueue<string>();

        public enum AnscardUplodaState
        {  
            [Display(Name = "待上传")]
            WaitToUpload = 0,

            [Display(Name = "正在上传")]
            Uploading = 1,

            [Display(Name = "上传成功")]
            UploadSuccess = 2,

            [Display(Name = "上传失败")]
            UploadFailed = 3,
        }
        private static int Tasks_Count;
        private int _tasks_state = 0;
        private DateTime Tasks_Time;
        public Thread Tasks_Thread;

        public int Tasks_State
        {
            get
            {
                return _tasks_state;
            }
            set
            {
                _tasks_state = value;
                if (value == 0)
                {
                    Tasks_Timer();
                }
            }
        }


        public static ImageUploadServices GetInstance()
        {
            return _instance ?? (_instance = new ImageUploadServices());
        }

        private ImageUploadServices()
        {
        }

        public void Tasks_Init()
        {
      
            Tasks_Thread = new Thread(Tasks_Run);
            Tasks_Time = DateTime.Now;
        }

        /// <summary>
        /// 时间统计
        /// </summary>
        private void Tasks_Timer()
        {

        }

        private void Tasks_Run()
        {
            int Tasks_Count_Max = 2;  

            while (true)
            {
                if (ImaeUpload_File != null && ImaeUpload_File.Count > 0 && Tasks_Count < Tasks_Count_Max)
                {
                    string file = null;
                    bool isSuc = ImaeUpload_File.TryDequeue(out file); 
                    if (isSuc)
                    {
                        Tasks_Do(file);
                        // Task.Run(() => Tasks_Do(file));
                        Tasks_Count++;
                    }
                    Thread.Sleep(100);
                }
                else
                {
                    Thread.Sleep(1000);
                }
            }
        }

        private async Task Tasks_Do(string data)
        {
            await Task.Run(() =>
            {
                try
                {
                    UploadImagesToCos(data);
                }
                catch (Exception ex)
                {
                   
                }
                finally
                {
                    Tasks_Count--;
                }
            });
        }

        public void Tasks_Add(string data)
        {
            if (data != null)
            {
                ImaeUpload_File.Enqueue(data);
            }
        }

        /// <summary>
        /// 上传至Cos
        /// </summary>
        private void UploadImagesToCos(string taskData)
        {
            if(taskData != null) 
            {
                string fileName = Path.GetFileName(taskData);
                string newUrl = CosossService.CreateOssService().SyncUploadFile($"GctAnalyse/AnswerSheet/4467690286423871488/4467701265748594688/3/4/{fileName}", taskData);
                string cosurl = newUrl;
                Console.WriteLine("成功上传:" + newUrl);
            }
        }
    }
}

调用:把D盘下的一个文件夹的图传上去试试(ps 当前每张图大小控制在200k左右)

// See https://aka.ms/new-console-template for more information
namespace TensentYunUpload
{
    static class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Hello, World!");
            Program.upload();
            Console.ReadKey();
        }

        public static void upload()
        {
            ImageUploadServices  _uploadservice = ImageUploadServices.GetInstance();
            _uploadservice.Tasks_Init();
            _uploadservice.Tasks_Thread.Start();
            string folderPath = @"D:\Pics\original";
            if (!Directory.Exists(folderPath))
            {
                Console.WriteLine("指定的文件夹不存在!");
                return;
            }
            string[] pngFiles = Directory.GetFiles(folderPath, "*.jpg", SearchOption.AllDirectories);
            Console.WriteLine("文件总数:" + pngFiles.Length);
            foreach (string filePath in pngFiles)
            {

                _uploadservice.Tasks_Add(filePath);
            }
            
        }
    }
}

 

posted @ 2025-07-23 16:09  Wind_Swing_Dunn  阅读(28)  评论(0)    收藏  举报