Files
WMS-Api/src/WMS.Web.Domain/Services/QiniuUploadService.cs
18942506660 97c83b9aa3 导出列表
2023-11-14 14:59:02 +08:00

74 lines
3.0 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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));
}
}
}