阅读 118

NetWebCore 实现文件上传功能

这是我参与更文挑战的第4天,活动详情查看: 更文挑战

关于我

我的博客 | 欢迎关注

前言

在进行Web前后端分析开始时,我们经常会碰到文件上传的需求。上传用户头像,上传认证材料、审核材料等,这些都可以归类为文件上传功能。

今天主要把自己在开发过程中的心得进行一个整理,供大家学习。

在 Web 根目录中提供文件

默认 Web 应用模板在 Startup.Configure 中调用 UseStaticFiles 方法,这将允许提供静态文件:

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
    if (env.IsDevelopment())
    {
        app.UseDeveloperExceptionPage();
    }
    else
    {
        app.UseExceptionHandler("/Home/Error");
        app.UseHsts();
    }

    app.UseHttpsRedirection();

    app.UseStaticFiles();

    app.UseRouting();

    app.UseAuthorization();

    app.UseEndpoints(endpoints =>
    {
        endpoints.MapDefaultControllerRoute();
    });
}
复制代码

无参数 UseStaticFiles 方法重载将 Web 根目录中的文件标记为可用。 以下标记引用 wwwroot/images/MyImage.jpg:

<img src="~/images/MyImage.jpg" class="img" alt="My image" />
复制代码

在上面的代码中,波形符 ~/ 指向 Web 根目录。

开启静态文件中间件

默认情况下,静态文件(如 HTML、CSS、图像和 JavaScript)是 ASP.NET Core 应用直接提供给客户端的资产。

开启静态文件访问,即可以通过浏览器地址输入http://127.0.0.1:8080/images/1.png访问图片或其他文件的方式。需要在中间件中进行配置。

StartUp.cs中Configure方法增加一行代码。即添加默认的静态文件中间件。

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{    
	app.UseStaticFiles();
}
复制代码

详情参考官方文档:

docs.microsoft.com/zh-cn/aspne…

文件上传功能

前后台分离项目,所以创建WebApi项目。新建一个控制器,文件名FileController,开始进行一个简单的文件上传编码。

public class FileController : ControllerBase
{
    private static IWebHostEnvironment _webHostingEnvironment;

    public FileController(IWebHostEnvironment hostingEnvironment)
    {
        _webHostingEnvironment = hostingEnvironment;
    }

    public IActionResult UploadFile(IFormFile formFile)
    {
        //var formFile = Request.Form.Files[0];//获取请求发送过来的文件

        var webRootPath = _webHostingEnvironment.WebRootPath;//应用程序根目录
        string dirPath = webRootPath + "/UploadFile/" + DateTime.Now.ToString("yyyyMMdd");
        //判断保存的文件夹是否存在,不存在创建
        if (!Directory.Exists(dirPath))
        {
            Directory.CreateDirectory(dirPath);
        }

        if (formFile == null)
        {
            //保存的文件名称可能存在重复,所以需要在后台对文件进行重命名
            string fileExtesion = Path.GetExtension(formFile.FileName);
            string fileName = Path.GetFileName(formFile.FileName) + "_" + Guid.NewGuid().ToString() + "." + fileExtesion;

            //保存文件
            using (var fs = System.IO.File.Create(webRootPath + "/" + fileName))
            {
                formFile.CopyTo(fs);
            }

            return new JsonResult(new { success = true, errMsg = "文件上传成功" });
        }
        else
        {
            return new JsonResult(new { success = false, errMsg = "未检测到上传的文件" });
        }

    }

}
复制代码
文章分类
后端
文章标签