C# Cơ bản .NET Core §1 Cài đặt, chương trình C# đầu tiên §2 Biến, kiểu dữ liệu và nhập/xuất §3 Toán tử số học và gán §4 So sánh, logic và lệnh if, switch §5 Vòng lặp for, while §6 Phương thức - Method §7 Phương thức - Delegate §8 Lớp - Class §9 Namespace §10 Partial, Nested §11 Kiểu giá trị, tham chiếu §12 Kiểu vô danh và dynamic §13 Biểu thức lambda §14 Event §15 Hàm hủy - Quá tải toán tử - thành viên tĩnh - indexer §16 null và nullable §17 Mảng §18 Chuỗi ký tự §19 Tính kế thừa §20 Phương thức khởi tạo §21 Tính đa hình - abstract - interface §22 Struct và Enum §23 Ngoại lệ Exeption §24 IDisposable - using §25 File cơ bản §26 FileStream §27 Generic §28 Collection - List §29 SortedList §30 Queue / Stack §31 Linkedlist §32 Dictionary - HashSet §33 Phương thức mở rộng §34 ObservableCollection §35 LINQ §36 (Multithreading) async - bất đồng bộ §37 Type §38 Attribute Annotation §39 DI Dependency Injection §40 (Multithreading) Parallel §41 Thư viện lớp §42 (Networking) HttpClient §43 (Networking) HttpMessageHandler §44 (Networking) HttpListener §45 (Networking) Tcp TcpListenerr/TcpClient §46 (ADO.NET) SqlConnection §47 (ADO.NET) SqlCommand §48 (EF Core) Tổng quan §49 (EF Core) Tạo Model §50 (EF Core) Fluent API §51 (EF Core) Query §52 (EF Core) Scaffold §53 (EF Core) Migration §54 (ASP.NET CORE) Hello World! §55 (ASP.NET CORE) Middleware §56 (ASP.NET CORE) Map - Request - Response §57 (ASP.NET CORE) IServiceCollection - MapWhen §58 (ASP.NET CORE) Session - ISession §59 (ASP.NET CORE) Configuration §60 (ASP.NET CORE) Gửi Mail §61 (ASP.NET RAZOR) Khởi tạo và Route §62 (ASP.NET RAZOR) Cú pháp Razor §63 (ASP.NET RAZOR) Layout trong ASP.NET Core §64 (ASP.NET RAZOR) Partial §65 (ASP.NET RAZOR) ViewComponent §66 (ASP.NET RAZOR) TagHelper §67 (ASP.NET RAZOR) PageModel §68 (ASP.NET RAZOR) Model Binding §69 (ASP.NET RAZOR) HTML Form, Validation §70 (ASP.NET RAZOR) Upload File §71 (ASP.NET RAZOR) HtmlHelper §72 (ASP.NET RAZOR) Entity Framework §73 (ASP.NET RAZOR) Paging §74 (ASP.NET RAZOR) Identity (1) - Register, Login, Logout §75 (ASP.NET RAZOR) Identity (2) Lockout, Reset Password §76 (ASP.NET RAZOR) Identity (3) Google Login §77 (ASP.NET RAZOR) Identity (4) Facebook Login §78 (ASP.NET RAZOR) Identity (5) profile, password, email ... §79 (ASP.NET RAZOR) Identity (6) Role §80 (ASP.NET RAZOR) Identity (7) Role-based Authorization §81 (ASP.NET RAZOR) Identity (8) RoleClaim §82 (ASP.NET RAZOR) Identity (9) Authorization Handler §83 (ASP.NET RAZOR) IAuthorizationService §84 (ASP.NET MVC) Controller - View §85 (ASP.NET MVC) MVC Route

Upload File trong Razor Page

Để upload file thì HTML Form phải sử dụng phương thức post, có thuộc tính enctype="multipart/form-data", phần tử để chọn file upload là <input> với kiểu type="file"

Tạo ra dự án ASP.NET Core Razor Page để thực hành, trong thư mục razor07.uploadfiles gõ lệnh

dotnet new webapp

Tạo file Pages/UploadOneFile.cshtmlPages/UploadOneFile.cshtml.cs trong Pages/UploadOneFile.cshtml.cs tạo ra PageModel như sau:

namespace razor07.uploadfiles.Pages
{
    public class UploadOneFileModel : PageModel {
        [Required(ErrorMessage = "Chọn một file")]
        [DataType(DataType.Upload)]
        [FileExtensions(Extensions="png,jpg,jpeg,gif")]
        [Display(Name="Chọn file upload")]
        [BindProperty]
        public IFormFile FileUpload { get; set; }
        public async Task OnPostAsync()
        {
            // Code xử lý khi upload file ở đây
        }
    }
}

Model này có thuộc tính kiểu IFormFile nó là dữ liệu File được Upload lên từ Form, đặt thuộc tính này tự động binding khi Form Post lên

Razor Pages/UploadOneFile.cshtml biên tập nội dung

@page 
@model UploadOneFileModel
<form method="post" enctype="multipart/form-data">
    <label asp-for="@Model.FileUpload"></label>
    <input asp-for="@Model.FileUpload" />
    <span asp-validation-formaction="@Model.FileUpload"></span>

    <button class="btn btn-danger" asp-page="UploadOneFile">Upload</button>
</form>

Viết code sử lý upload file, file được copy vào thư mục uploads

namespace razor07.uploadfiles.Pages {
  public class UploadOneFileModel : PageModel {

    private IHostingEnvironment _environment;
    public UploadOneFileModel (IHostingEnvironment environment) {
      _environment = environment;
    }

    [Required (ErrorMessage = "Chọn một file")]
    [DataType (DataType.Upload)]
    [FileExtensions (Extensions = "png,jpg,jpeg,gif")]
    [Display (Name = "Chọn file upload")]
    [BindProperty]
    public IFormFile FileUpload { get; set; }
    public async Task OnPostAsync () {
      if (FileUpload != null) {
        var file = Path.Combine (_environment.ContentRootPath, "uploads", FileUpload.FileName);
        using (var fileStream = new FileStream (file, FileMode.Create)) {
          await FileUpload.CopyToAsync (fileStream);
        }
      }

    }

  }
}

Upload nhiều File trong Razor Page

Khai báo có thuộc tính mảng kiểu IFormFile để có chức năng upload nhiều file, ví dụ:

UploadMulti.cshtml.cs

using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.IO;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.RazorPages;
using Microsoft.Extensions.Logging;

namespace razor07.uploadfiles.Pages {
  public class UploadMultiModel : PageModel {

    private IHostingEnvironment _environment;
    public UploadMultiModel (IHostingEnvironment environment) {
      _environment = environment;
    }

    [Required (ErrorMessage = "Chọn một file")]
    [DataType (DataType.Upload)]
    [FileExtensions (Extensions = "png,jpg,jpeg,gif")]
    [Display (Name = "Chọn file upload")]
    [BindProperty]
    public IFormFile[] FileUploads { get; set; }
    public async Task OnPostAsync () {
      if (FileUploads != null) {
         foreach (var FileUpload in FileUploads)
         {
              var file = Path.Combine (_environment.ContentRootPath, "uploads", FileUpload.FileName);
              using (var fileStream = new FileStream (file, FileMode.Create)) {
                await FileUpload.CopyToAsync (fileStream);
              }
         }
      }

    }

  }
}

Trong UploadMulti.cshtml

@page 
@model UploadMultiModel
<form method="post" enctype="multipart/form-data">
    <label asp-for="@Model.FileUploads"></label>
    <input asp-for="@Model.FileUploads" />
    <span asp-validation-formaction="@Model.FileUploads"></span>

    <button class="btn btn-danger" asp-page="UploadMulti">Upload</button>
</form>

Mã nguồn ASP_NET_CORE/razor07.uploadfiles

Đăng ký theo dõi ủng hộ kênh