.Net Core Webapi 图片上传
public class ImgController : ControllerBase { private readonly IWebHostEnvironment_environment; public ImgController(IWebHostEnvironmentenvironment) { _environment = environment; } /// <summary> /// 上传图片 /// </summary> /// <param name="file"></param> /// <returns></returns> /// <exception cref="Exception"></exception> [HttpPost] public async Task<IActionResult> UploadFiles(IFormFile file) { if (file == null) return new OkObjectResult("请选择你要上传的图片!"); var images = new string[] { ".png", ".gif", ".jpg", ".bmp", ".jpeg" }; if (!images.Any(x => file.FileName.EndsWith(x))) return new OkObjectResult("上传图片格式有误!"); if (file.Length > 10 * 1024 * 1024) return new OkObjectResult("图片大小不可大于10MB!"); string fileExt = file.FileName.Substring(file.FileName.LastIndexOf('.')); //文件扩展名 string newFileName = Guid.NewGuid().ToString("N") + fileExt; var filePath = Path.Combine(_environment.WebRootPath+ "/imgs/" + newFileName) ; //判断当前文件夹(目录)是否存在 if (!Directory.Exists(filePath)) { using var stream = new FileStream(filePath, FileMode.Create); file.CopyTo(stream); stream.Flush(); return new OkObjectResult("上传成功!"); } return BadRequest("上传失败,服务器内部错误!"); }
}
[HttpPost] public async Task<string> TestUploadFile(IFormFile? formFile) { if (HttpContext.Request.Form.Files.Count <= 0) return "请选择上传文件"; var fileFloader = Path.Combine(_environment.WebRootPath, "test"); var fileName = Guid.NewGuid().ToString() + "_" + formFile.FileName; var filePath = Path.Combine(fileFloader, fileName); if (!Directory.Exists(fileFloader)) { Directory.CreateDirectory(fileFloader); } formFile.CopyTo(new FileStream(filePath, FileMode.OpenOrCreate, FileAccess.ReadWrite)); return "ok"; }
使用Md5上传
[HttpPost] public async Task<string> UploadFileAsync(IFormFile formFile) { try { if (formFile == null) return "请选择要上传的文件"; var md5 = GetFileHash(formFile.OpenReadStream()); var fileExtension = Path.GetExtension(formFile.FileName); var fileName = md5 + fileExtension; var path = Path.Combine(_webHostEnvironment.WebRootPath, "Images"); var filePath = Path.Combine(path, fileName); if (!Directory.Exists(path)) { Directory.CreateDirectory(path); } if (System.IO.File.Exists(filePath)) { return "该文件已经上传过了"; } formFile.CopyTo(new FileStream(filePath, FileMode.CreateNew)); return "上传成功"; } catch (Exception e) { throw new Exception(e.Message); } } private static string GetFileHash(Stream fileStream) { using var md5 = MD5.Create(); byte[] hashBytes = md5.ComputeHash(fileStream); StringBuilder sb = new(); for (int i = 0; i < hashBytes.Length; i++) { sb.Append(hashBytes[i].ToString("X2")); } return sb.ToString(); }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!