74 lines
3.0 KiB
C#
74 lines
3.0 KiB
C#
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<QiniuOptions> option)
|
||
{
|
||
_option = option?.Value;
|
||
}
|
||
/// <summary>
|
||
/// 上传文件
|
||
/// </summary>
|
||
/// <param name="fileName"></param>
|
||
/// <param name="stream"></param>
|
||
/// <param name="isAutoDelte"></param>
|
||
/// <returns></returns>
|
||
public Task<Result<string>> 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<string>.ReSuccess(_option.Url + fileName));
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
Console.WriteLine(ex);
|
||
return Task.FromResult(Result<string>.ReFailure("上传文件失败" + ex.ToString(), 0));
|
||
}
|
||
return Task.FromResult(Result<string>.ReFailure("上传文件失败" + JsonConvert.SerializeObject(result), 0));
|
||
}
|
||
}
|
||
}
|