在要求输入邮箱的文本域,请填写真实的邮件地址。非真实邮件地址,将收不到回复信息。

ASP.NET Core简单的文件上传

.net core 清风 371℃ 0评论
朋友发消息说他老婆公司资料无法拷贝出来,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简单的文件上传

喜欢 (0)or分享 (0)
支付宝扫码打赏 微信打赏
发表我的评论
取消评论

CAPTCHA Image
Reload Image
表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址