美文网首页ASP.NET Core
ASP.NET Core文件上传

ASP.NET Core文件上传

作者: GongZH丶 | 来源:发表于2018-05-17 09:42 被阅读15次

上传文件一般有两种方式,一种是提交表单方式,一种是Ajax方式。

前端页面

<form method="post" enctype="multipart/form-data" asp-controller="Home" asp-action="UploadFiles">
        <div class="form-group">
            <div class="col-md-10">
                <p>Upload one or more files using this form:</p>
                <input type="file" id="files" name="files" multiple />
            </div>
        </div>
        <div class="form-group">
            <div id="info" class="col-md-10">@Html.Raw(ViewBag.Message)</div>
        </div>
        <div class="form-group">
            <div class="col-md-10">
                <input type="submit" value="服务器方式上传" />
                <input type="button" id="upload" name="upload" value="AJAX方式上传" />
            </div>
        </div>
 </form>

后端处理

        /// <summary>
        /// 表单提交上传 通过IFormFile参数获取上传文件信息
        /// </summary>
        /// <param name="files"></param>
        /// <returns></returns>
        [HttpPost]
        public IActionResult UploadFiles(List<IFormFile> files)
        {
            long size = 0;
            StringBuilder stringBuilder = new StringBuilder();
            foreach (var file in files)
            {
                //var fileName = file.FileName;
                var fileName = ContentDispositionHeaderValue
                                .Parse(file.ContentDisposition)
                                .Name
                                .Trim('"');
                var fileDir = Path.Combine(_hostingEnv.WebRootPath, "UploadFiles");
                if (!Directory.Exists(fileDir))
                {
                    Directory.CreateDirectory(fileDir);
                }
                string filePath = fileDir + $@"\{fileName}";
                size += file.Length;
                using (FileStream fs = System.IO.File.Create(filePath))
                {
                    file.CopyTo(fs);
                    fs.Flush();
                }
                stringBuilder.AppendLine($"文件\"{fileName}\" /{size}字节上传成功 <br/>");
            }
            stringBuilder.AppendLine($"共{files.Count}个文件 /{size}字节上传成功! <br/>");
            ViewBag.Message = stringBuilder.ToString();
            return View();
        }

        /// <summary>
        /// AJAX请求上传,通过Request.Form.Files获取上传文件信息
        /// </summary>
        /// <returns></returns>
        [HttpPost]
        public JsonResult AjaxUploadFiles()
        {
            long size = 0;
            var files = Request.Form.Files;
            StringBuilder stringBuilder = new StringBuilder();
            foreach (var file in files)
            {
                //var fileName = file.FileName;
                var fileName = ContentDispositionHeaderValue
                                .Parse(file.ContentDisposition)
                                .Name
                                .Trim('"');
                var fileDir = Path.Combine(_hostingEnv.WebRootPath, "UploadFiles");
                if (!Directory.Exists(fileDir))
                {
                    Directory.CreateDirectory(fileDir);
                }
                string filePath = fileDir + $@"\{fileName}";
                size += file.Length;
                using (FileStream fs = System.IO.File.Create(filePath))
                {
                    file.CopyTo(fs);
                    fs.Flush();
                }
                stringBuilder.AppendLine($"文件\"{fileName}\" /{size}字节上传成功 <br/>");
            }
            stringBuilder.AppendLine($"共{files.Count}个文件 /{size}字节上传成功! <br/>");
            ViewBag.Message = stringBuilder.ToString();
            return Json(new {
                msg= stringBuilder.ToString()
            });
        }

相关文章

网友评论

    本文标题:ASP.NET Core文件上传

    本文链接:https://www.haomeiwen.com/subject/uqnvdftx.html