using Microsoft.Extensions.Options; using Newtonsoft.Json; using Qiniu.Http; using Qiniu.Storage; using Qiniu.Util; using System; using System.Collections.Generic; using System.IO; using System.Text; using System.Threading.Tasks; using WMS.Web.Core.Internal.Results; using WMS.Web.Domain.IService; using WMS.Web.Domain.Options; namespace WMS.Web.Domain.Services { public class QiniuUploadService : IQiniuUploadService { private readonly QiniuOptions _option; public QiniuUploadService(IOptions option) { _option = option?.Value; } /// /// 上传文件 /// /// /// /// /// public Task> Upload(string fileName, Stream stream, bool isAutoDelte = false) { // 生成(上传)凭证时需要使用此Mac // 这个示例单独使用了一个Settings类,其中包含AccessKey和SecretKey // 实际应用中,请自行设置您的AccessKey和SecretKey Mac mac = new Mac(_option.AccessKey, _option.SecretKey); PutPolicy putPolicy = new PutPolicy(); // 如果需要设置为"覆盖"上传(如果云端已有同名文件则覆盖),请使用 SCOPE = "BUCKET:KEY" putPolicy.Scope = _option.Bucket + ":" + fileName; // putPolicy.Scope = bucket; // 上传策略有效期(对应于生成的凭证的有效期) putPolicy.SetExpires(3600); // 上传到云端多少天后自动删除该文件,如果不设置(即保持默认默认)则不删除 if (isAutoDelte) putPolicy.DeleteAfterDays = 7; string jstr = putPolicy.ToJsonString(); string token = Auth.CreateUploadToken(mac, jstr); Config config = new Config(); // 空间对应的机房 华 东 ZONE_CN_East 华 北 ZONE_CN_North 华 南 ZONE_CN_Sout 北 美 ZONE_US_North 东南亚 ZONE_AS_Singapore config.Zone = Zone.ZONE_CN_South; // 是否使用https域名 config.UseHttps = true; // 上传是否使用cdn加速 config.UseCdnDomains = true; HttpResult result = null; try { FormUploader fu = new FormUploader(config); result = fu.UploadStream(stream, fileName, token, null); if (result.Code == 200) return Task.FromResult(Result.ReSuccess(_option.Url + fileName)); } catch (Exception ex) { Console.WriteLine(ex); return Task.FromResult(Result.ReFailure("上传文件失败" + ex.ToString(), 0)); } return Task.FromResult(Result.ReFailure("上传文件失败" + JsonConvert.SerializeObject(result), 0)); } } }