using System;
using System.IO;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Options;
using Admin.Core.Model.Output;
using Admin.Core.Attributes;
using Admin.Core.Common.Helpers;
using Admin.Core.Common.Configs;
using Admin.Core.Common.Auth;
namespace Admin.Core.Controllers.Admin
{
///
/// 图片管理
///
public class ImgController : AreaController
{
private readonly IUser _user;
private readonly UploadConfig _uploadConfig;
public ImgController(IUser user, IOptionsMonitor uploadConfig)
{
_user = user;
_uploadConfig = uploadConfig.CurrentValue;
}
/*
///
/// 获取头像
///
///
///
///
[HttpGet]
[Route("{fileName}")]
[NoOprationLog]
[AllowAnonymous]
public FileStreamResult Avatar([FromServices]IWebHostEnvironment environment, string fileName = "")
{
string filePath = Path.Combine(environment.WebRootPath,"avatar", fileName);
var stream = System.IO.File.OpenRead(filePath);
string fileExt = Path.GetExtension(filePath);
var contentTypeProvider = new Microsoft.AspNetCore.StaticFiles.FileExtensionContentTypeProvider();
var contentType = contentTypeProvider.Mappings[fileExt];
var fileDownloadName = Path.GetFileName(filePath);
return File(stream, contentType, fileDownloadName);
}
*/
///
/// 上传头像
///
///
///
[HttpPost]
[Login]
public async Task AvatarUpload(IFormFile file)
{
if(file == null || file.Length < 1)
{
if (Request.Form.Files != null && Request.Form.Files.Any())
{
file = Request.Form.Files[0];
}
}
if (file == null || file.Length < 1)
{
return ResponseOutput.NotOk("请上传头像!");
}
var avatar = _uploadConfig.Avatar;
//格式限制
if (!avatar.ContentType.Contains(file.ContentType))
{
return ResponseOutput.NotOk("图片格式错误");
}
//大小限制
if (!(file.Length <= avatar.Size))
{
return ResponseOutput.NotOk("图片过大");
}
var dateTimeFormat = avatar.DateTimeFormat.NotNull() ? DateTime.Now.ToString(avatar.DateTimeFormat) : "";
var format = avatar.Format.NotNull() ? string.Format(avatar.Format,_user.Id) : "";
var savePath = Path.Combine(dateTimeFormat, format);
var fullDirectory = Path.Combine(avatar.Path, savePath);
if (!Directory.Exists(fullDirectory))
{
Directory.CreateDirectory(fullDirectory);
}
var saveFileName = $"{new Snowfake(0).nextId()}{Path.GetExtension(file.FileName)}";
var fullPath = Path.Combine(fullDirectory, saveFileName);
using (var stream = new FileStream(fullPath, FileMode.Create))
{
await file.CopyToAsync(stream);
}
return ResponseOutput.Ok(Path.Combine(savePath, saveFileName));
}
}
}