QiniuHelper

  • binGe博客
  • 开发笔记
  • 2024/1/25 14:23:21
  • 人已阅读
简介七牛OSS虽然用起来还不错,但是有个麻烦的问题,域名备案变更后,全局资源刷新cdn控制不太良好,需自行制定处理方案
using Qiniu.Http;
using Qiniu.Storage;
using Qiniu.Util;
using Serilog;
namespace AssessmentTraining.NuGet.Other
{
    /// <summary>
    /// 七牛云帮助类
    /// </summary>
    public class QiniuHelper
    {
        /// <summary>
        /// 获得七牛Token
        /// </summary>
        /// <param name="AccessKey"></param>
        /// <param name="SecretKey"></param>
        /// <param name="Scope">空间bucket名</param>
        /// <param name="PersistentOps">持久化策略</param>
        /// <returns></returns>
        public static string GetQiniuToken(string AccessKey, string SecretKey, string Scope, string PersistentOps = "")
        {
            Mac mac = new(AccessKey, SecretKey);
            PutPolicy putPolicy = new();
            putPolicy.Scope = Scope;
            putPolicy.SetExpires(7200);
            //图片加水印API地址:https://developer.qiniu.com/dora/1316/image-watermarking-processing-watermark#7
            if (!PersistentOps.IsNullOrEmpty())
            {
                putPolicy.SetExpires(3600);
                putPolicy.PersistentOps = PersistentOps;//"watermark/2/text/5LiD54mb5LqR5a2Y5YKo/fontsize/400";
            }
            return Auth.CreateUploadToken(mac, putPolicy.ToJsonString());
        }
        /// <summary>
        /// 上传文件到七牛服务器:未测试通过,提示crc32 not match
        /// </summary>
        /// <param name="key"></param>
        /// <param name="fileStream"></param>
        /// <param name="QiniuBucket"></param>
        /// <param name="Qiniu_AccessKey"></param>
        /// <param name="Qiniu_SecretKey"></param>
        /// <returns></returns>
        public static async Task<string> UploadFile(string key, FileStream fileStream, string QiniuBucket, string Qiniu_AccessKey, string Qiniu_SecretKey)
        {
            //var ext = Path.GetExtension(filePath);
            //// 上传文件名
            key = DateTime.Now.ToString("yyyy-MM-dd_hh-MM-ss") + "_" + key;
            // 本地文件路径
            //string filePath = "D:\\tools\\putty.exe";
            // 存储空间名
            string Bucket = QiniuBucket;
            // 生成上传token
            string token = GetQiniuToken(Qiniu_AccessKey,Qiniu_SecretKey, Bucket);
            Config config = new Config();
            // 设置上传区域
            config.Zone = Zone.ZoneCnSouth;//文件默认存放华南区域
            // 设置 http 或者 https 上传
            config.UseHttps = true;
            config.UseCdnDomains = true;
            config.ChunkSize = ChunkUnit.U512K;
            // 表单上传
            FormUploader target = new FormUploader(config);
            HttpResult result = await target.UploadStream(fileStream, key, token, null);
            if (result.Code != (int)HttpCode.OK)
            {
                Log.Error(result.Text, "UploadFileFromStream报错");
                throw new Exception(result.Text);
            }
            return key;
        }
        /// <summary>
        /// 上传文件到网站服务器,再上传到七牛服务器 :不加水印
        /// 不推荐:占用服务器空间
        /// </summary>
        /// <param name="filePath">本地文件路径</param>
        /// <param name="QiniuBucket"></param>
        /// <param name="Qiniu_AccessKey"></param>
        /// <param name="Qiniu_SecretKey"></param>
        /// <returns></returns>
        public static async Task<string> UploadFile(string filePath, string QiniuBucket, string Qiniu_AccessKey, string Qiniu_SecretKey)
        {
            var ext = Path.GetExtension(filePath);
            // 上传文件名
            string key = DateTime.Now.ToString("yyyy-MM-dd_hh-MM-ss") + ext;
            // 本地文件路径
            //string filePath = "D:\\tools\\putty.exe";
            // 存储空间名
            string Bucket = QiniuBucket;
            // 生成上传token
            string token = GetQiniuToken(Qiniu_AccessKey, Qiniu_SecretKey, Bucket);
            Config config = new Config();
            // 设置上传区域
            config.Zone = Zone.ZoneCnSouth;
            // 设置 http 或者 https 上传
            config.UseHttps = true;
            config.UseCdnDomains = true;
            config.ChunkSize = ChunkUnit.U512K;
            // 表单上传
            FormUploader target = new FormUploader(config);
            HttpResult result = await target.UploadFile(filePath, key, token, null);
            if (result.Code != (int)HttpCode.OK)
            {
                Log.Error(result.Text, "UploadFile报错");
            }
            return key;
        }
        /// <summary>
        /// 七牛删除文件
        /// </summary>
        /// <param name="key"></param>
        /// <param name="QiniuBucket"></param>
        /// <param name="Qiniu_AccessKey"></param>
        /// <param name="Qiniu_SecretKey"></param>
        /// <returns></returns>
        public static async Task<bool> DeleteFile(string key, string QiniuBucket, string Qiniu_AccessKey, string Qiniu_SecretKey)
        {
            // 设置存储区域
            Config config = new Config();
            config.Zone = Zone.ZoneCnEast;
            Mac mac = new Mac(Qiniu_AccessKey, Qiniu_SecretKey);
            BucketManager bucketManager = new BucketManager(mac, config);
            //key = key.Replace(QiniuDomain, "");
            HttpResult deleteRet = await bucketManager.Delete(QiniuBucket, key);
            Log.Information("delete comlete: " + deleteRet.ToString());
            if (deleteRet.Code != (int)HttpCode.OK)
            {
                Log.Error("delete error: " + deleteRet.ToString());
                return false;
            }
            return true;
        }
        /// <summary>
        /// 七牛云转存文件:加不了水印
        /// </summary>
        /// <param name="sourcePicUrl">类似钉钉http地址</param>
        /// <param name="desFileName"></param>
        /// <param name="Qiniu_AccessKey"></param>
        /// <param name="Qiniu_SecretKey"></param>
        /// <param name="QiniuScope"></param>
        /// <returns></returns>
        public static async Task<bool> QiniuFetchFile(string sourcePicUrl, string desFileName, string Qiniu_AccessKey, string Qiniu_SecretKey, string QiniuScope)
        {
            // 设置存储区域
            Config config = new Config();
            config.Zone = Zone.ZoneCnSouth;
            Mac mac = new Mac(Qiniu_AccessKey, Qiniu_SecretKey);
            BucketManager bucketManager = new BucketManager(mac, config);
            // 公网可访问的文件链接
            string resUrl = sourcePicUrl;
            // 存储空间名
            string Bucket = QiniuScope;
            // 文件名
            string Key = desFileName;// Path.GetFileName(dingPicUrl);
            FetchResult ret = await bucketManager.Fetch(resUrl, Bucket, Key);
            if (ret.Code != (int)HttpCode.OK)
            {
                Log.Error(ret.Text, "QiniuFetchFile报错");
            }
            return ret.Code == (int)HttpCode.OK;
        }
    }
}

 

文章评论

评论
  • 消灭零回复
Top