123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109 |
-
- using System;
- using System.Collections.Generic;
- using System.IO;
- using System.Linq;
- using System.Net.Http;
- using System.Text;
- using System.Threading.Tasks;
- using System.Web;
- using System.Web.Http;
- using XdCxRhDW.WebApi;
- namespace XdCxRhDW.WebApi
- {
- /// <summary>
- ///文件上传接口
- /// </summary>
- public class FileController : BaseController
- {
- private readonly string uploadFolder;
- /// <summary>
- ///
- /// </summary>
- public FileController()
- {
- this.uploadFolder = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "wwwroot");
- }
- /// <summary>
- /// 上传文件(返回上传后的文件名)
- /// </summary>
- /// <returns></returns>
- [HttpPost, SwaggerForm]
- public async Task<AjaxResult<string>> UploadFileAsync()
- {
- if (!Request.Content.IsMimeMultipartContent("form-data"))
- {
- bool s = Request.Content.IsFormData();
- return Error<string>("请求数据不是form-data类型");
- }
- var provider = new MultipartMemoryStreamProvider();
- await Request.Content.ReadAsMultipartAsync(provider);
- Directory.CreateDirectory(uploadFolder);
- var content = provider.Contents.First();
- var fileName = Guid.NewGuid().ToString() + ".dat";
- var fileData = await content.ReadAsByteArrayAsync();
- // 将文件保存到本地文件夹中
- var filePath = Path.Combine(uploadFolder, fileName);
- using (var fileStream = new FileStream(filePath, FileMode.Create))
- {
- await fileStream.WriteAsync(fileData, 0, fileData.Length);
- }
- //清除1个小时之前的文件
- _ = Task.Run(() =>
- {
- var files = Directory.EnumerateFiles(uploadFolder);
- foreach (var file in files)
- {
- FileInfo info = new FileInfo(file);
- if (info.CreationTime < DateTime.Now.AddHours(-1))
- {
- try
- {
- info.Delete();
- }
- catch
- {
- }
- }
- }
- });
- return Success(fileName);
- }
- /// <summary>
- /// 批量删除文件
- /// </summary>
- /// <param name="files">上传后返回的一个或多个文件集合</param>
- /// <returns>返回删除成功的文件个数</returns>
- [HttpPost]
- public AjaxResult<int> DeleteFiles(FileDeleteDto dto)
- {
- if(dto.Files==null||dto.Files.Count==0)return Success(0);
- int count = 0;
- foreach (var fileName in dto.Files)
- {
- try
- {
- var file = Path.Combine(uploadFolder, fileName);
- if (File.Exists(file))
- {
- File.Delete(file);
- count++;
- }
- }
- catch (Exception ex)
- {
- Serilog.Log.Error(ex, $"删除文件[{fileName}]失败!");
- }
- }
- return Success(count);
- }
- }
- }
|