Compare commits

...
7 Commits
Author SHA1 Message Date
xrain d54b71badb update package; add write file 2020-03-12 11:46:30 +08:00
xrain ddeb2948b7 add static any file 2020-03-11 23:27:17 +08:00
xrain fb1ce7d931 fix savefile response 2020-03-04 12:07:49 +08:00
xrain c117d9ef1f fix savefile response 2020-03-03 15:23:56 +08:00
xrain 9b38ee9b39 add mutil role 2020-02-18 08:07:51 +08:00
xrain 116dd1a808 fix upload 2020-02-18 07:13:16 +08:00
xrain 26753657b8 add YYupload 2020-02-18 06:37:48 +08:00
8 changed files with 156 additions and 14 deletions
+4 -2
View File
@@ -1,4 +1,5 @@
using System.Linq; using System;
using System.Linq;
using Microsoft.AspNetCore.Mvc.Filters; using Microsoft.AspNetCore.Mvc.Filters;
using YYApi.Communications; using YYApi.Communications;
using YYApi.Exceptions; using YYApi.Exceptions;
@@ -8,6 +9,7 @@ namespace YYApi.Attributes
/// <summary> /// <summary>
/// 检测登录中间件 /// 检测登录中间件
/// </summary> /// </summary>
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method)]
public class YYAuthAttribute : ActionFilterAttribute public class YYAuthAttribute : ActionFilterAttribute
{ {
private string[] Types { get; } private string[] Types { get; }
@@ -39,7 +41,7 @@ namespace YYApi.Attributes
throw new YYApiException(401); throw new YYApiException(401);
} }
//检测用户类型 //检测用户类型
if (!Types.Contains(loginInfo.Type)) if (Types.Intersect(loginInfo.Type).Count() == 0)
{ {
throw new YYApiException(403); throw new YYApiException(403);
} }
+3 -1
View File
@@ -1,10 +1,12 @@
using Swashbuckle.AspNetCore.Annotations; using System;
using Swashbuckle.AspNetCore.Annotations;
namespace YYApi.Attributes namespace YYApi.Attributes
{ {
/// <summary> /// <summary>
/// 快捷自定义接口文档类 /// 快捷自定义接口文档类
/// </summary> /// </summary>
[AttributeUsage(AttributeTargets.Method | AttributeTargets.Class)]
public class YYDocAttribute : SwaggerOperationAttribute public class YYDocAttribute : SwaggerOperationAttribute
{ {
/// <summary> /// <summary>
+1 -1
View File
@@ -9,6 +9,6 @@ namespace YYApi.Communications
//登录用户的ID //登录用户的ID
public int Id { get; set; } public int Id { get; set; }
//登录用户来源 //登录用户来源
public string Type { get; set; } public string[] Type { get; set; }
} }
} }
+3 -3
View File
@@ -46,7 +46,7 @@ namespace YYApi.Controllers
/// <param name="code">错误代码</param> /// <param name="code">错误代码</param>
/// <param name="message">错误描述(若是常规错误,代码可自动带取描述)</param> /// <param name="message">错误描述(若是常规错误,代码可自动带取描述)</param>
/// <returns></returns> /// <returns></returns>
protected static void Error(int code, string message = "") protected static void Error(int code = 500, string message = "")
{ {
throw new YYApiException(code, message); throw new YYApiException(code, message);
} }
@@ -57,7 +57,7 @@ namespace YYApi.Controllers
/// <param name="condition">检测条件</param> /// <param name="condition">检测条件</param>
/// <param name="code">错误代码</param> /// <param name="code">错误代码</param>
/// <param name="message">错误描述</param> /// <param name="message">错误描述</param>
protected static void ErrorWhen(bool condition, int code, string message = "") protected static void ErrorWhen(bool condition, int code = 500, string message = "")
{ {
if (condition) if (condition)
{ {
@@ -71,7 +71,7 @@ namespace YYApi.Controllers
/// <param name="condition">检测条件</param> /// <param name="condition">检测条件</param>
/// <param name="code">错误代码</param> /// <param name="code">错误代码</param>
/// <param name="message">错误描述</param> /// <param name="message">错误描述</param>
protected static void ErrorWhenNull(object condition, int code, string message = "") protected static void ErrorWhenNull(object condition, int code = 404, string message = "请求的资源不存在")
{ {
ErrorWhen(condition == null, code, message); ErrorWhen(condition == null, code, message);
} }
+28 -4
View File
@@ -25,7 +25,7 @@ namespace YYApi
public static IServiceCollection AddYYApi(this IServiceCollection builder, string title, public static IServiceCollection AddYYApi(this IServiceCollection builder, string title,
string description = null) string description = null)
{ {
return builder.AddYYAuth().AddYYDoc(title, description).AddCors(); return builder.AddYYAuth().AddYYDoc(title, description).AddCors().AddYYUpload();
} }
/// <summary> /// <summary>
@@ -33,12 +33,12 @@ namespace YYApi
/// </summary> /// </summary>
/// <param name="builder"></param> /// <param name="builder"></param>
/// <param name="title"></param> /// <param name="title"></param>
/// <param name="staticFileroot"></param>
/// <param name="submitMethods"></param> /// <param name="submitMethods"></param>
/// <returns></returns> /// <returns></returns>
public static IApplicationBuilder UseYYApi(this IApplicationBuilder builder, string title = "API文档", public static IApplicationBuilder UseYYApi(this IApplicationBuilder builder, string title = "API文档", params SubmitMethod[] submitMethods)
params SubmitMethod[] submitMethods)
{ {
return builder.UseYYException().UseYYDoc(title, submitMethods).UseMiddleware<YYAuthMiddleware>().UseCors(x => x.AllowAnyHeader().AllowAnyMethod().AllowAnyOrigin()); return builder.UseYYException().UseYYDoc(title, submitMethods).UseMiddleware<YYAuthMiddleware>().UseCors(x => x.AllowAnyHeader().AllowAnyMethod().AllowAnyOrigin()).UseYYUpload();
} }
@@ -55,6 +55,16 @@ namespace YYApi
return builder.AddScoped<YYAuth>(); return builder.AddScoped<YYAuth>();
} }
/// <summary>
/// 添加Base64上传组件
/// </summary>
/// <param name="builder"></param>
/// <returns></returns>
public static IServiceCollection AddYYUpload(this IServiceCollection builder)
{
return builder.AddSingleton<YYUpload>();
}
/// <summary> /// <summary>
/// 添加Api文档服务 /// 添加Api文档服务
/// </summary> /// </summary>
@@ -95,6 +105,20 @@ namespace YYApi
return builder.UseMiddleware<YYExceptionMiddleware>(); return builder.UseMiddleware<YYExceptionMiddleware>();
} }
/// <summary>
/// 配置上传组件必须
/// </summary>
/// <param name="builder"></param>
/// <returns></returns>
public static IApplicationBuilder UseYYUpload(this IApplicationBuilder builder)
{
return builder.UseStaticFiles(new StaticFileOptions
{
DefaultContentType = "application/x-msdownload",
ServeUnknownFileTypes = true
});
}
/// <summary> /// <summary>
/// 使用文档UI /// 使用文档UI
/// </summary> /// </summary>
+11
View File
@@ -24,6 +24,17 @@ namespace YYApi.Helpers
/// <param name="id"></param> /// <param name="id"></param>
/// <returns></returns> /// <returns></returns>
public string Set(int id, string type = "user") public string Set(int id, string type = "user")
{
return Set(id, new[] { type });
}
/// <summary>
/// 产生一个TOken并记录用户ID角色[多角色]
/// </summary>
/// <param name="id"></param>
/// <param name="type"></param>
/// <returns></returns>
public string Set(int id, string[] type)
{ {
var uuid = Guid.NewGuid().ToString(); var uuid = Guid.NewGuid().ToString();
var loginItem = new YYLoginItem var loginItem = new YYLoginItem
+103
View File
@@ -0,0 +1,103 @@
using System;
using System.IO;
using Microsoft.AspNetCore.Hosting;
namespace YYApi.Helpers
{
public class YYUpload
{
private string FilePathFolder = "/uploads/";
public string FilePath
{
set
{
if (!value.StartsWith("/"))
{
FilePathFolder = $"/{value}";
}
if (!FilePathFolder.EndsWith("/"))
{
FilePathFolder += "/";
}
}
get
{
return FilePathFolder;
}
}
private IWebHostEnvironment Env { get; }
public YYUpload(IWebHostEnvironment env)
{
Env = env;
}
public class YYUploadInfo
{
public string Path { get; set; }
public int Size { get; set; }
}
/// <summary>
/// 保存base64文件,如果有标头按照标头自动识别
/// </summary>
/// <param name="base64"></param>
/// <param name="ext">扩展名</param>
/// <param name="path">存放路径</param>
/// <param name="fileName">文件名</param>
/// <returns></returns>
public YYUploadInfo SaveFile(string base64, string ext = null, string path = null, string fileName = null)
{
byte[] bt;
var filePath = FilePath + path;
if (fileName == null)
{
fileName = Guid.NewGuid().ToString();
}
var baseArr = base64.Split(";");
if (baseArr.Length == 2)
{
var info = baseArr[0].Split(":")[1].Split("/");
if (path == null)
{
filePath += $"{info[0]}/";
}
if (ext == null)
{
ext = info[1];
}
var data = baseArr[1].Split(",");
bt = Convert.FromBase64String(data[1]);
}
else
{
bt = Convert.FromBase64String(base64);
}
var fn = fileName + (string.IsNullOrEmpty(ext) ? string.Empty : $".{ext}");
return WriteFile(filePath, fn, bt);
}
/// <summary>
/// 把数据写入文件
/// </summary>
/// <param name="filePath"></param>
/// <param name="fileName"></param>
/// <param name="data"></param>
/// <returns></returns>
public YYUploadInfo WriteFile(string filePath, string fileName, byte[] data)
{
var realPath = Directory.GetCurrentDirectory() + "/wwwroot" + filePath;
if (!Directory.Exists(realPath))
{
Directory.CreateDirectory(realPath);
}
File.WriteAllBytes(realPath + fileName, data);
return new YYUploadInfo
{
Path = filePath + fileName,
Size = data.Length
};
}
}
}
+2 -2
View File
@@ -23,8 +23,8 @@
<Folder Include="Exceptions\" /> <Folder Include="Exceptions\" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<PackageReference Include="Swashbuckle.AspNetCore.Annotations" Version="5.0.0" /> <PackageReference Include="Swashbuckle.AspNetCore.Annotations" Version="5.1.0" />
<PackageReference Include="Swashbuckle.AspNetCore.SwaggerUI" Version="5.0.0" /> <PackageReference Include="Swashbuckle.AspNetCore.SwaggerUI" Version="5.1.0" />
<PackageReference Include="HangFire.Core" Version="1.7.9" /> <PackageReference Include="HangFire.Core" Version="1.7.9" />
<PackageReference Include="Hangfire.AspNetCore" Version="1.7.9" /> <PackageReference Include="Hangfire.AspNetCore" Version="1.7.9" />
<PackageReference Include="Hangfire.Console" Version="1.4.2" /> <PackageReference Include="Hangfire.Console" Version="1.4.2" />