.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 @ 2022-01-10 01:23  含泪拒绝王阿姨i  阅读(273)  评论(0)    收藏  举报