朋友发消息说他老婆公司资料无法拷贝出来,U盘以及常见的网盘全部无效。问我有没有其他办法,于是就使用asp.net core做了一个最简单的文件上传来试一试。理论上应该可行,因为新的上传网站以及页面元素没有在他们公司网监出现过,死马当作活马医吧!离职最后一天的最后2个小时了,时间紧任务哦!
ASP.NET MVC操作支持使用简单模型绑定对较小文件进行单个或者多个文件上传。
使用模型绑定上传小文件
要上传较小的文件,可以使用多部分HTML表单或使用JavaScript构建POST请求。
<form action="/Home/UploadFiles" method="post" name="upload" enctype="multipart/form-data">
<div class="form-group">
<div class="col-md-10">
<p>选择文件:</p>
<input type="file" name="files" multiple />
</div>
</div>
<div class="form-group">
<div class="col-md-10">
<input type="submit" value="上传" />
</div>
</div>
</form>
为了支持文件上传,HTML表单必须指定enctype的multipart/form-data。
以上HTML代码最终呈现如下图:
可以使用IFormFile接口通过模型绑定访问上载到服务器的各个文件。具有以下结构:IFormFile
public interface IFormFile
{
string ContentType { get; }
string ContentDisposition { get; }
IHeaderDictionary Headers { get; }
long Length { get; }
string Name { get; }
string FileName { get; }
Stream OpenReadStream();
void CopyTo(Stream target);
Task CopyToAsync(Stream target, CancellationToken cancellationToken = null);
}
使用模型绑定以及IFormFile接口上传文件时候,action方法可以接受单个(
IFormFile )或多个( IEnumerable )文件。以下循环处理一个或多个
文件上传,将它们保存到本地磁盘,并返回上载的文件的总数和大小。
添加必要引用
using Microsoft.AspNetCore.Hosting;
添加私有成员
private IHostingEnvironment hostingEnv;
在构造函数中为成员hostingEnv赋值,.net core 默认的依赖注入。
public HomeController(IHostingEnvironment hostingEnvironment)
{
hostingEnv = hostingEnvironment;
}
接收上传文件的处理方法
public IActionResult UploadFiles(List files)
{
long size = 0;
foreach (var file in files)
{
var fileName = ContentDispositionHeaderValue
.Parse(file.ContentDisposition)
.FileName
.Trim('"');
string pathFolder =Path.Combine(hostingEnv.WebRootPath,$"upload");
if (!Directory.Exists(pathFolder))
{
Directory.CreateDirectory(pathFolder);
}
fileName = Path.Combine(pathFolder,fileName);
size += file.Length;
using (FileStream fs = System.IO.File.Create(fileName))
{
file.CopyTo(fs);
fs.Flush();
}
}
ViewBag.Message = $"{files.Count}个文件 /{size}字节上传成功!";
return View();
}
filename未经过验证,这里仅仅做为试例。如果生产环境使用,请自行对文件进行安全性验证效验。
上传文件返回页面呈现如下:
转载请注明:清风亦平凡 » ASP.NET Core简单的文件上传