namespace Tiobon.Core.Controllers
{
///
/// 图片管理
///
[Route("api/[controller]")]
[ApiController]
[Authorize, ApiExplorerSettings(GroupName = Grouping.GroupName_System)]
public class ImgController : BaseApiController
{
private readonly IWebHostEnvironment _env;
public ImgController(IWebHostEnvironment webHostEnvironment)
{
_env = webHostEnvironment;
}
// GET: api/Download
///
/// 下载图片(支持中文字符)
///
///
[HttpGet]
[Route("/images/Down/Pic")]
public FileStreamResult DownImg()
{
string foldername = "";
string filepath = Path.Combine(_env.WebRootPath, foldername, "测试下载中文名称的图片.png");
var stream = System.IO.File.OpenRead(filepath);
string fileExt = ".jpg"; // 这里可以写一个获取文件扩展名的方法,获取扩展名
//获取文件的ContentType
var provider = new Microsoft.AspNetCore.StaticFiles.FileExtensionContentTypeProvider();
var memi = provider.Mappings[fileExt];
var fileName = Path.GetFileName(filepath);
return File(stream, memi, fileName);
}
///
/// 上传图片,多文件
///
///
///
[HttpPost]
[Route("/images/Upload/Pic")]
public async Task> InsertPicture([FromForm] UploadFileDto dto)
{
if (dto.file == null || !dto.file.Any()) return Failed("请选择上传的文件。");
//格式限制
var allowType = new string[] { "image/jpg", "image/png", "image/jpeg" };
var allowedFile = dto.file.Where(c => allowType.Contains(c.ContentType));
if (!allowedFile.Any()) return Failed("图片格式错误");
if (allowedFile.Sum(c => c.Length) > 1024 * 1024 * 4) return Failed("图片过大");
string foldername = "images";
string folderpath = Path.Combine(_env.WebRootPath, foldername);
if (!Directory.Exists(folderpath))
{
Directory.CreateDirectory(folderpath);
}
foreach (var file in allowedFile)
{
string strpath = Path.Combine(foldername, DateTime.Now.ToString("MMddHHmmss") + Path.GetFileName(file.FileName));
var path = Path.Combine(_env.WebRootPath, strpath);
using (var stream = new FileStream(path, FileMode.OpenOrCreate, FileAccess.ReadWrite))
{
await file.CopyToAsync(stream);
}
}
var excludeFiles = dto.file.Except(allowedFile);
if (excludeFiles.Any())
{
var infoMsg = $"{string.Join('、', excludeFiles.Select(c => c.FileName))} 图片格式错误";
return Success(null, infoMsg);
}
return Success(null, "上传成功");
}
[HttpGet]
[Route("/images/Down/Bmd")]
[AllowAnonymous]
public FileStreamResult DownBmd(string filename)
{
if (string.IsNullOrEmpty(filename))
{
return null;
}
// 前端 blob 接收,具体查看前端admin代码
string filepath = Path.Combine(_env.WebRootPath, Path.GetFileName(filename));
if (System.IO.File.Exists(filepath))
{
var stream = System.IO.File.OpenRead(filepath);
//string fileExt = ".bmd";
//获取文件的ContentType
var provider = new Microsoft.AspNetCore.StaticFiles.FileExtensionContentTypeProvider();
//var memi = provider.Mappings[fileExt];
var fileName = Path.GetFileName(filepath);
HttpContext.Response.Headers.Append("fileName", fileName);
return File(stream, "application/octet-stream", fileName);
}
else
{
return null;
}
}
// POST: api/Img
[HttpPost]
public void Post([FromBody] object formdata)
{
}
// PUT: api/Img/5
[HttpPut("{id}")]
public void Put(int id, [FromBody] string value)
{
}
// DELETE: api/ApiWithActions/5
[HttpDelete("{id}")]
public void Delete(int id)
{
}
}
}