.NET File Upload

VS2022 .NET8

💾基础上传示例

view

@{
    ViewData["Title"] = "File Upload";
}

<h1>@ViewData["Title"]</h1>

<form method="post" enctype="multipart/form-data" action="/Home/UploadFile">
    <div class="form-group">
    
        <input type="file" name="file" class="form-control" />
    </div>
    <button type="submit" class="btn btn-primary">Upload</button>
</form>

controller

        [HttpPost]
        public async Task<IActionResult> UploadFile()
        {
            var file = Request.Form.Files[0];
            if (file != null && file.Length > 0)
            {
                var uploads = Path.Combine(Directory.GetCurrentDirectory(), "wwwroot", "up");
                if (!Directory.Exists(uploads))
                {
                    Directory.CreateDirectory(uploads);
                }

                var filePath = Path.Combine(uploads, file.FileName);
                using (var fileStream = new FileStream(filePath, FileMode.Create))
                {
                    await file.CopyToAsync(fileStream);
                }

                // SAVE TO DB

                return RedirectToAction("Index");
            }

            return View();
        }

 app.UseStaticFiles();

run

在这里插入图片描述

📀优化 限制文件大小

上传文件夹如 img => img rar => file
限制文件大小

    // 根据文件类型选择上传的文件夹
    string fileExtension = Path.GetExtension(file.FileName).ToLower();
    switch (fileExtension)
    {
        case ".jpg":
        case ".png":
            uploadFolder = Path.Combine("wwwroot", "img");
            break;
        case ".mp4":
            // 检查视频大小是否超过限制
            if (file.Length > 20 * 1024 * 1024) // 20MB
            {
                ModelState.AddModelError("File", "Video file size should not exceed 20MB.");
                return View("Index", file);
            }
            uploadFolder = Path.Combine("wwwroot", "vd");
            break;
        case ".m4a":
            uploadFolder = Path.Combine("wwwroot", "sound");
            break;
        case ".rar":
            uploadFolder = Path.Combine("wwwroot", "file");
            break;
        default:
            ModelState.AddModelError("File", "Unsupported file format.");
            return View("Index", file);
    }

在这里插入图片描述

🪫删除

view

@model IEnumerable<string>

<h1>Uploaded Files</h1>

@if (Model.Any())
{
    <table class="table">
        <thead>
            <tr>
                <th>File Name</th>
                <th>Action</th>
            </tr>
        </thead>
        <tbody>
            @foreach (var fileName in Model)
            {
                <tr>
                    <td>@fileName</td>
                    <td>
                        <form method="post" asp-action="DeleteFile">
                            <input type="hidden" name="fileName" value="@fileName" />
                            <button type="submit" class="btn btn-danger">Delete</button>
                        </form>
                    </td>
                </tr>
            }
        </tbody>
    </table>
}
else
{
    <p>No files uploaded yet.</p>
}


controller

      [HttpPost]
      public IActionResult DeleteFile(string fileName)
      {
          var uploadFolder = Path.Combine(Directory.GetCurrentDirectory(), "wwwroot", "img");
          var filePath = Path.Combine(uploadFolder, fileName);
          if (System.IO.File.Exists(filePath))
          {
              System.IO.File.Delete(filePath);
          }
          return RedirectToAction("Files");
      }

在这里插入图片描述

💿️重命名

        string fileName = $"{DateTime.Now:yyyyMMddHHmmssfff}{new Random().Next(1000, 9999)}{fileExtension}";
        var filePath = Path.Combine(uploads, fileName);
        using (var fileStream = new FileStream(filePath, FileMode.Create))
        {
            await file.CopyToAsync(fileStream);
        }

在这里插入图片描述
在这里插入图片描述

💽多文件上传

controller

  [ApiController]
  [Route("[controller]")]
  public class FileUploadController : ControllerBase
  {
      private readonly string UploadsDirectory = Path.Combine(Directory.GetCurrentDirectory(), "uploads");

   
      public FileUploadController()
      {
          // 创建上传文件夹(如果不存在)
          if (!Directory.Exists(UploadsDirectory))
          {
              Directory.CreateDirectory(UploadsDirectory);
          }
      }

      [HttpPost]
      [Route("upload")]
      public async Task<IActionResult> Upload(IFormFile[] files)
      {
          if (files == null || files.Length == 0)
          {
              return BadRequest("No files uploaded.");
          }

          foreach (var file in files)
          {
              if (file.Length == 0)
              {
                  return BadRequest($"File {file.FileName} is empty.");
              }

              // 根据文件类型选择上传的文件夹
              string uploadFolder = GetUploadFolder(file.FileName);

              // 重命名文件为指定格式
              string fileName = $"{DateTime.Now:yyyyMMddHHmmssfff}_{Guid.NewGuid()}{Path.GetExtension(file.FileName)}";
              string filePath = Path.Combine(UploadsDirectory, uploadFolder, fileName);

              using (var stream = new FileStream(filePath, FileMode.Create))
              {
                  await file.CopyToAsync(stream);
              }

              // to db
          }

          return Ok("Files uploaded successfully.");
      }

      private string GetUploadFolder(string fileName)
      {
          string fileExtension = Path.GetExtension(fileName).ToLower();
          switch (fileExtension)
          {
              case ".jpg":
              case ".png":
                  return "img";
              case ".mp4":
                  return "vd";
              case ".m4a":
                  return "sound";
              case ".rar":
                  return "file";
              default:
                  throw new NotSupportedException($"Unsupported file format for {fileName}.");
          }
      }
  }

view


@{
    ViewBag.Title = "File Upload";
}

<h2>File Upload2</h2>

<form id="uploadForm" enctype="multipart/form-data">
    <input type="file" id="fileInput" multiple>
    <input type="button" value="Upload" onclick="uploadFiles()" />
</form>
<div id="message"></div>

@section scripts {
    <script>
        function uploadFiles() {
            var files = document.getElementById('fileInput').files;
            if (files.length === 0) {
                showMessage('No files selected.');
                return;
            }

            var formData = new FormData();
            for (var i = 0; i < files.length; i++) {
                formData.append('files', files[i]);
            }

            $.ajax({
                url: '@Url.Action("Upload", "FileUpload")',
                type: 'POST',
                data: formData,
                processData: false,
                contentType: false,
                success: function (response) {
                    showMessage(response);
                },
                error: function (xhr, status, error) {
                    showMessage('Upload failed: ' + error);
                }
            });
        }

        function showMessage(message) {
            $('#message').text(message);
        }
    </script>
}

  • 10
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值