上传文件一般有两种方式,一种是提交表单方式,一种是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()
});
}
网友评论