Example #1
0
        /// <summary>
        /// 文件服务器接收上传文件[要求使用multipart/form-data请求编码类型][上传图片也不保存大/中/小图,需要的时候,自己加上webp后缀即可][不考虑自定义文件名的情况]
        /// </summary>
        public List <string> Upload(UploadFileCmd cmd)
        {
            if (cmd.Files == null || cmd.Files.Files.Count == 0)
            {
                throw new Exception("请选择文件!");
            }

            //文件类型是图片时,进行图片内容类型验证
            if (cmd.FileType == FileType.Image)
            {
                foreach (var formFile in cmd.Files.Files)
                {
                    if (!formFile.ContentType.Contains("image"))
                    {
                        throw new Exception("图片格式不正确!");
                    }
                }
            }

            //验证文件路径长度和文件长度是否一致
            if (string.IsNullOrEmpty(cmd.FilePath))
            {
                throw new Exception("文件保存路径不能为空!");
            }

            var list       = new List <string>();
            var fileServer = _fileServerSettings.FileServer;

            foreach (var formFile in cmd.Files.Files)
            {
                var fileExt = Path.GetExtension(formFile.FileName);

                //保存到指定路径下
                var directory    = $"/upload/{EnumHelper.Description(cmd.ComeFrom)}/{cmd.FilePath}/{DateTime.Now:yyyyMM}/";
                var relativePath = directory + StringGenerator.FileName(fileExt);

                if (!Directory.Exists(_env.WebRootPath + directory))
                {
                    Directory.CreateDirectory(_env.WebRootPath + directory);
                }

                using (var fileStream = new FileStream(_env.WebRootPath + relativePath, FileMode.OpenOrCreate))
                {
                    formFile.CopyTo(fileStream);
                    list.Add(fileServer + relativePath);
                }
            }
            return(list);
        }
        public ResponseDto <List <string> > Upload(UploadFileCmd cmd)
        {
            var result = _fileAppService.Upload(cmd);

            return(Success("上传成功!", result));
        }