本文共 10022 字,大约阅读时间需要 33 分钟。
using System;using System.Collections.Generic;using System.Linq;using System.Threading.Tasks;using Microsoft.AspNetCore.Authorization;using Microsoft.AspNetCore.Mvc.Filters;using Microsoft.AspNetCore.Mvc;using ZRFCoreTestMongoDB.Model;using ZRFCoreTestMongoDB.Commoms;using Microsoft.IdentityModel.Tokens;using System.Text;using System.Security.Claims;using System.IdentityModel.Tokens.Jwt;using Microsoft.AspNetCore.Http;using System.IO;using Microsoft.AspNetCore.Hosting;[ApiController][Route("api/[Controller]")]public class MyJwtTestController : ControllerBase{ private readonly JwtConfigModel _jsonmodel; private IWebHostEnvironment _evn; public MyJwtTestController(IWebHostEnvironment evn) { this._evn = evn; _jsonmodel = AppJsonHelper.InitJsonModel(); } [HttpPost, Route("UpFile")] public async Task UpFile([FromForm] IFormCollection formcollection) { ApiResult result = new ApiResult(); try { var files = formcollection.Files; if (files != null && files.Any()) { var file = files[0]; string contentType = file.ContentType; string fileOrginname = file.FileName; // 新建文本文档.txt 原始的文件名称 string fileExtention = Path.GetExtension(fileOrginname); // 判断文件的格式是否正确 string cdipath = Directory.GetCurrentDirectory(); string fileupName = Guid.NewGuid().ToString("d") + fileExtention; string upfilePath = Path.Combine(cdipath + "/myupfiles/", fileupName); if (!System.IO.File.Exists(upfilePath)) { using (var stream = System.IO.File.Create(upfilePath)) { } } double count = await UpLoadFileStreamHelper.UploadWriteFileAsync(file.OpenReadStream(), upfilePath); result.message = "上传成功!"; result.code = StatusCode.success; result.data = $"上传的文件大小为:{count}MB"; } } catch (Exception ex) { result.message = "上传异常,原因:" + ex.Message; } return result; } [HttpPost, Route("UpFile02")] public async Task UpFileBymodel([FromForm] UpFileModel model) { ApiResult result = new ApiResult(); try { bool flag = await UpLoadFileStreamHelper.UploadWriteFileByModelAsync(model); result.code = flag ? StatusCode.success : StatusCode.fail; result.message = flag ? "上传成功" : "上传失败"; } catch (Exception ex) { result.message = "上传异常,原因:" + ex.Message; } return result; } [HttpPost, Route("UpFile03")] public async Task UpFile03([FromForm] IFormFile file) { ApiResult result = new ApiResult(); try { bool flag = await UpLoadFileStreamHelper.UploadWriteFileAsync(file); result.code = flag ? StatusCode.success : StatusCode.fail; result.message = flag ? "上传成功" : "上传失败"; } catch (Exception ex) { result.message = "上传异常,原因:" + ex.Message; } return result; }} { "upfileInfo": { "uploadFilePath": "/Myupfiles/" }} using System;using System.Collections.Generic;using System.Linq;using System.Threading.Tasks;using Microsoft.Extensions.Configuration;using Microsoft.Extensions.Caching;namespace ZRFCoreTestMongoDB.Commoms{ public class AppJsonHelper { public static JwtConfigModel InitJsonModel() { string key = "key_myjsonfilekey"; JwtConfigModel cachemodel = SystemCacheHelper.GetByCache(key); if (cachemodel == null) { ConfigurationBuilder builder = new ConfigurationBuilder(); var broot = builder.AddJsonFile("./configs/zrfjwt.json").Build(); cachemodel = broot.GetSection("jwtconfig").Get(); SystemCacheHelper.SetCacheByFile(key, cachemodel); } return cachemodel; } public static T GetJsonModelByFilePath (string jsonName, string jsonFilePath) { if (!string.IsNullOrEmpty(jsonName)) { ConfigurationBuilder builder = new ConfigurationBuilder(); var broot = builder.AddJsonFile(jsonFilePath).Build(); T model = broot.GetSection(jsonName).Get(); return model; } return default; } }} using Microsoft.AspNetCore.Http;using Microsoft.AspNetCore.Mvc;using System.IO;using ZRFCoreTestMongoDB.Model;namespace ZRFCoreTestMongoDB.Commoms{ public class UpLoadFileStreamHelper { const int WRITE_FILE_SIZE = 1024 * 1024 * 2; public static double UploadWriteFile(Stream stream, string path) { try { double writeCount = 0; using (FileStream fileStream = new FileStream(path, FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.ReadWrite, WRITE_FILE_SIZE)) { Byte[] by = new byte[WRITE_FILE_SIZE]; int readCount = 0; while ((readCount = stream.Read(by, 0, by.Length)) > 0) { fileStream.Write(by, 0, readCount); writeCount += readCount; } return Math.Round((writeCount * 1.0 / (1024 * 1024)), 2); } } catch (Exception ex) { throw new Exception("发生异常:" + ex.Message); } } public static async Task UploadWriteFileAsync(Stream stream, string path) { try { double writeCount = 0; using (FileStream fileStream = new FileStream(path, FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.ReadWrite, WRITE_FILE_SIZE)) { Byte[] by = new byte[WRITE_FILE_SIZE]; int readCount = 0; while ((readCount = await stream.ReadAsync(by, 0, by.Length)) > 0) { await fileStream.WriteAsync(by, 0, readCount); writeCount += readCount; } } return Math.Round((writeCount * 1.0 / (1024 * 1024)), 2); } catch (Exception ex) { throw new Exception("发生异常:" + ex.Message); } } public static async Task UploadWriteFileAsync(IFormFile file, string path) { try { using (FileStream fileStream = new FileStream(path, FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.ReadWrite, WRITE_FILE_SIZE)) { await file.CopyToAsync(fileStream); return true; } } catch (Exception ex) { throw new Exception("发生异常:" + ex.Message); } } public static async Task UploadWriteFileByModelAsync(UpFileModel model) { try { var files = model.file.Files; if (files != null && files.Any()) { var file = files[0]; string contentType = file.ContentType; string fileOrginname = file.FileName; string fileExtention = Path.GetExtension(fileOrginname); string cdipath = Directory.GetCurrentDirectory(); string fileupName = Guid.NewGuid().ToString("d") + fileExtention; string upfilePath = Path.Combine(cdipath + "/myupfiles/", fileupName); if (!System.IO.File.Exists(upfilePath)) { using (var stream = System.IO.File.Create(upfilePath)) { } } using (FileStream fileStream = new FileStream(upfilePath, FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.ReadWrite)) { using (Stream stream = file.OpenReadStream()) { await stream.CopyToAsync(fileStream); return true; } } } } catch (Exception ex) { throw new Exception("发生异常:" + ex.Message); } return false; } } using System;using System.Collections.Generic;using System.Linq;using Microsoft.AspNetCore.Hosting;using Microsoft.Extensions.Configuration;using Microsoft.Extensions.Hosting;using Microsoft.Extensions.Logging;namespace CoreTestMongoDB{ public class Program { public static void Main(string[] args) { CreateHostBuilder(args).Build().Run(); } public static IHostBuilder CreateHostBuilder(string[] args) => Host.CreateDefaultBuilder(args) .ConfigureWebHostDefaults(webBuilder => { webBuilder.UseStartup(Startup.CreateDefaultBuilder); webBuilder.ConfigureKestrel(c => { c.Limits.MaxRequestBodySize = 1024 * 1024 * 300; }); }) .UseServiceProviderFactory(new Autofac.Extensions.DependencyInjection.AutofacServiceProviderFactory()); }} 通过以上实现,您可以轻松完成文件上传功能,支持多种文件上传方式,并通过自定义配置文件灵活配置上传路径和其他参数。
转载地址:http://mvqzz.baihongyu.com/