.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();
        }
复制代码

 

posted @   含泪拒绝王阿姨i  阅读(252)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
点击右上角即可分享
微信分享提示