首页 > 其他分享 >上传文件 FileUpload

上传文件 FileUpload

时间:2023-02-19 17:33:47浏览次数:43  
标签:文件 FileUpload return var using 上传 public

appsetting.json 配置参数

  "StoredFilesPath": "wwwroot\\Images",
  "FileSizeLimit": 2097152

  

using Microsoft.AspNetCore.Mvc;
using Microsoft.IdentityModel.Protocols;
using MvcMovie.Data;
using MvcMovie.Models;
using MvcMovie.ViewModels;
using static System.Net.Mime.MediaTypeNames;

namespace MvcMovie.Controllers;
public class FileUploadController : Controller
{
    IHostEnvironment _host;
    IConfiguration _config;
    MvcMovieContext _dbContext;
    string _storedFilesPath = string.Empty;//上传文件目录
    readonly long _fileSizeLimit;//文件大小限制

    public FileUploadController(IHostEnvironment host, IConfiguration config, MvcMovieContext dbContext)
    {
        _host = host;
        _config = config;
        _storedFilesPath = Path.Combine(_host.ContentRootPath,
       _config["StoredFilesPath"]);
        _fileSizeLimit = _config.GetValue<long>("FileSizeLimit");
        _dbContext = dbContext;
    }

    public IActionResult Index()
    {
        return View();
    }
    //上传单个文件
    [HttpPost]
    public async Task<IActionResult> Upload(FileUpload fileUpload)
    {
        long size = fileUpload.FormFile.Length;

        if (size > 0)
        {

            //          var filePath = Path.Combine(_storedFilesPath,
            //Path.GetRandomFileName());
            var filePath = Path.Combine(_storedFilesPath, GenerateFileName(fileUpload.FormFile.FileName));

            using (var stream = System.IO.File.Create(filePath))
            {
                await fileUpload.FormFile.CopyToAsync(stream);
            }
        }
        return RedirectToAction("Index");
    }

    public IActionResult UploadMultiple()
    {
        return View();
    }
    //上传多个文件
    [HttpPost]
    public async Task<IActionResult> UploadMultiple(FileUpload fileUpload)
    {
        long size = fileUpload.FormFiles.Sum(f => f.Length);

        foreach (var formFile in fileUpload.FormFiles)
        {
            if (formFile.Length > 0)
            {

                var filePath = Path.Combine(_storedFilesPath,
        Path.GetRandomFileName());

                using (var stream = System.IO.File.Create(filePath))
                {
                    await formFile.CopyToAsync(stream);
                }
            }
        }

        // Process uploaded files
        // Don't rely on or trust the FileName property without validation.

        var count = (new { count = fileUpload.FormFiles.Count, size });

        return RedirectToAction("Index");
    }

    public IActionResult UploadDb()
    {
        return View();
    }
    //上传文件到数据库中的byte[]字段
    [HttpPost]
    public async Task<IActionResult> UploadDb(BufferedSingleFileUploadDbViewModel viewModel)
    {
        if (viewModel == null || viewModel.FormFile == null)
        {
            ModelState.AddModelError("", "请选择一个文件。");
            return View();
        }
        if (!ValidFileExtension(viewModel.FormFile.FileName))
        {
            ModelState.AddModelError("", "不支持的文件类型。");
            return View();
        }
        using (var memoryStrema = new MemoryStream())
        {
            await viewModel.FormFile.CopyToAsync(memoryStrema);
            //仅能上传文件小于2MB
            if (memoryStrema.Length < _fileSizeLimit)
            {
                var file = new AppFile
                {
                    Content = memoryStrema.ToArray()
                };
                _dbContext.appFiles.Add(file);
                await _dbContext.SaveChangesAsync();
            }
            else
            {
                ModelState.AddModelError("", "上传文件大不能超过2M。");
                return View();
            }
        }
        return RedirectToAction("Index");
    }
    /// <summary>
    /// 文件扩展名验证
    /// </summary>
    /// <param name="uploadedFileName">上传文件名</param>
    /// <returns></returns>
    private bool ValidFileExtension(string uploadedFileName)
    {
        string[] permittedExtensions = { ".txt", ".pdf", ".doc" };

        var ext = Path.GetExtension(uploadedFileName).ToLowerInvariant();

        if (string.IsNullOrEmpty(ext) || !permittedExtensions.Contains(ext))
        {
            return false;
        }
        return true;
    }
    /// <summary>
    /// 生成文件名
    /// </summary>
    /// <param name="uploadedFileName"></param>
    /// <returns></returns>
    private string GenerateFileName(string uploadedFileName)
    {
        string fileName = Guid.NewGuid().ToString();
        fileName = $"{fileName}{Path.GetExtension(uploadedFileName)}";
        return fileName;
    }
}
public class FileUpload
    {
        public IFormFile FormFile { get; set; }
        public List<IFormFile> FormFiles { get; set;}
    }

 一、上传单个文件 

@model FileUpload
<h3>上传单个文件</h3>
<form enctype="multipart/form-data" asp-action="Upload" method="post">
    <dl>
        <dt>
            <label asp-for="FormFile"></label>
        </dt>
        <dd>
            <input asp-for="FormFile" type="file" />
            <span asp-validation-for="FormFile"></span>
        </dd>
    </dl>
    <input class="btn btn-primary" type="submit" value="Upload" />
</form>

<a asp-action="UploadMultiple">上传多个文件</a>
<a asp-action="UploadDb">上传文件到数据库</a>

 二、上传多个文件

@model FileUpload

<h2>一次选择多个文件上传</h2>

<form enctype="multipart/form-data" asp-action="UploadMultiple" method="post">
    <dl>
        <dt>
            <label asp-for="FormFiles"></label>
        </dt>
        <dd>
            <input asp-for="FormFiles" type="file" multiple />
            <span asp-validation-for="FormFiles"></span>
        </dd>
    </dl>
    <input class="btn btn-primary" type="submit" value="Upload" />
</form>

三、上传文件到数据库

public class AppFile
    {
        public int Id { get; set; }
        public byte[] Content { get; set; }
    }

 

  public class BufferedSingleFileUploadDbViewModel
    {
        [Required]
        [Display(Name = "文件")]
        public IFormFile FormFile { get; set; }
    }

 

@model BufferedSingleFileUploadDbViewModel
<h3>上传文件到数据库</h3>
<form enctype="multipart/form-data" asp-action="UploadDb" method="post">
    <dl>
        <dt>
            <label asp-for="FormFile"></label>
        </dt>
        <dd>
            <input asp-for="FormFile" type="file" />
            <span asp-validation-for="FormFile"></span>
        </dd>
    </dl>
    <div asp-validation-summary="ModelOnly" class="text-danger"></div>
    <input class="btn btn-primary" type="submit" value="Upload" />
</form> 

服务器和应用程序配置

多部分正文长度限制

MultipartBodyLengthLimit 设置每个多部分正文的长度限制。 分析超出此限制的窗体部分时,会引发 InvalidDataException。 默认值为 134,217,728 (128 MB)。 使用 Startup.ConfigureServices 中的 MultipartBodyLengthLimit 设置自定义此限制:

 

public void ConfigureServices(IServiceCollection services)
{
    services.Configure<FormOptions>(options =>
    {
        // Set the limit to 256 MB
        options.MultipartBodyLengthLimit = 268435456;
    });
}

在 Razor Pages 应用或 MVC 应用中,将筛选器应用到页面模型或操作方法:

// Set the limit to 256 MB
[RequestFormLimits(MultipartBodyLengthLimit = 268435456)]
public class BufferedSingleFileUploadPhysicalModel : PageModel
{
    ...
}

参考:https://learn.microsoft.com/zh-cn/aspnet/core/mvc/models/file-uploads?view=aspnetcore-7.0

 

标签:文件,FileUpload,return,var,using,上传,public
From: https://www.cnblogs.com/friend/p/17135162.html

相关文章

  • [Qt开发/毕业设计/求职项目]局域网环境下远程文件发送部署系统-服务端、客户端双端的
    写在前面本文旨在做一个简单的代码讲解,我会给出源码,然后整个代码的讲解都在源码的基础上进行。代码可能会随着更新而进行修改,但是整体框架变化不会太大。整个文章内容不......
  • 文件操作相关对象和API
    ArrayBuffer为了满足JavaScript与显卡之间大量的、实时的数据交换,它们之间的数据通信必须是二进制的,而不能是传统的文本格式。文本格式传递一个32位整数,两端的JavaSc......
  • 第八章从源文件到可执行文件
    本章所讲的就是原文件与可执行文件及其转换。源代码是用某种编程语言编写的程序,源文件是保存源代码的文件。用任何编程语言编写的源代码经过翻译后得到的是本地代码。本地......
  • 使用python批量转换.jfif文件为.jpg
    python代码如下,有需要的自行取用:需要引入Image库,方法是:pipinstallImage importosfromPILimportImageroot_dir=r'C:\temp'deflist_files(root_dir):......
  • LabVIEW|知识点:XML文件格式
      XML(eXtensibleMarkupLanguage)是一种目前广泛使用的数据传输和存储的格式,其本质上是一种文本文件,可以使用任何一个文本编辑工具打开和修改。类似于HTML,XML被设计为具......
  • 前端vue的JsPDF html2canvas 生成pdf并以文件流形式上传到后端(转载)
    原文地址1.首先在文件内引入htmlToPdf.js这里代码引入了html2canvas和jspdf//需要npmihtml2Canvas和npmijspdf在这里将getPdf这个函数挂载到Vue的原型上,最后retu......
  • golang 单测运行单个函数、文件、跳过文件命令
    1、单测运行1.2运行某个单测函数gotest-v-run=xxx,xxx是函数名,支持正则表达式;参数-v说明需要打印详情提示Golang单测是根据前缀匹配来执行的,gotest-v-run=......
  • K8SYaml文件详解
    一、K8S支持的文件格式kubernetes支持YAML和JSON文件格式管理资源对象。JSON格式:主要用于api接口之间消息的传递YAML格式:用于配置和管理,YAML是一种简洁的非标记性语言,内......
  • 文件上传基础小总结
    基础及过滤方式什么是文件上传漏洞?存在文件上传的地方均有可能有文件漏洞(但不是一定有);如果上传代码某个地方存在验证疏忽,则会有文件漏洞危害可能直接获取网站权限,危......
  • Linux系列教程(十四)——Linux用户和用户组管理之相关配置文件
    前面我们介绍了软件包管理。首先介绍了rpm包的相关命令,但是我们发现直接安装rpm包会被其依赖性折磨的不行,然后解决办法是yum在线管理,通过yum命令安装rpm包能自动帮助我......