QiniuHelper
- 开发笔记
- 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; } } }
上一篇:获取Redis分布式系统锁
下一篇:获取随机编码
文章评论
- 消灭零回复