Chào mừng bạn đến với hướng dẫn cách tạo và lưu tệp trong Javascript. Chà, đây sẽ là một quá trình phức tạp cho người mới bắt đầu. Để mọi thứ đơn giản – Lưu tệp trên NodeJS phía máy chủ rất dễ dàng, nhưng thật khó để lưu trực tiếp tệp ở phía máy khách do các hạn chế về bảo mật. Điều đó nói rằng, có nhiều phương pháp chúng ta có thể sử dụng
Các cách có thể để tạo và lưu tệp trong Javascript là
- Sử dụng thư viện có tên là FileSaver –
1// [A] CREATE BLOB OBJECT var myBlob = new Blob[["CONTENT"], {type: "text/plain"}]; // [B] CREATE DOWNLOAD LINK var url = window.URL.createObjectURL[myBlob]; var anchor = document.createElement["a"]; anchor.href = url; anchor.download = "demo.txt"; // [C] "FORCE DOWNLOAD" // NOTE: MAY NOT ALWAYS WORK DUE TO BROWSER SECURITY // BETTER TO LET USERS CLICK ON THEIR OWN anchor.click[]; window.URL.revokeObjectURL[url]; document.removeChild[anchor];
- Tạo một đối tượng blob và cung cấp tính năng “lưu dưới dạng”
2// [A] CREATE BLOB OBJECT var myBlob = new Blob[["CONTENT"], {type: "text/plain"}]; // [B] CREATE DOWNLOAD LINK var url = window.URL.createObjectURL[myBlob]; var anchor = document.createElement["a"]; anchor.href = url; anchor.download = "demo.txt"; // [C] "FORCE DOWNLOAD" // NOTE: MAY NOT ALWAYS WORK DUE TO BROWSER SECURITY // BETTER TO LET USERS CLICK ON THEIR OWN anchor.click[]; window.URL.revokeObjectURL[url]; document.removeChild[anchor];
3// [A] CREATE BLOB OBJECT var myBlob = new Blob[["CONTENT"], {type: "text/plain"}]; // [B] CREATE DOWNLOAD LINK var url = window.URL.createObjectURL[myBlob]; var anchor = document.createElement["a"]; anchor.href = url; anchor.download = "demo.txt"; // [C] "FORCE DOWNLOAD" // NOTE: MAY NOT ALWAYS WORK DUE TO BROWSER SECURITY // BETTER TO LET USERS CLICK ON THEIR OWN anchor.click[]; window.URL.revokeObjectURL[url]; document.removeChild[anchor];
4// [A] CREATE BLOB OBJECT var myBlob = new Blob[["CONTENT"], {type: "text/plain"}]; // [B] CREATE DOWNLOAD LINK var url = window.URL.createObjectURL[myBlob]; var anchor = document.createElement["a"]; anchor.href = url; anchor.download = "demo.txt"; // [C] "FORCE DOWNLOAD" // NOTE: MAY NOT ALWAYS WORK DUE TO BROWSER SECURITY // BETTER TO LET USERS CLICK ON THEIR OWN anchor.click[]; window.URL.revokeObjectURL[url]; document.removeChild[anchor];
0// [A] CREATE BLOB OBJECT var myBlob = new Blob[["CONTENT"], {type: "text/plain"}]; // [B] CREATE DOWNLOAD LINK var url = window.URL.createObjectURL[myBlob]; var anchor = document.createElement["a"]; anchor.href = url; anchor.download = "demo.txt"; // [C] "FORCE DOWNLOAD" // NOTE: MAY NOT ALWAYS WORK DUE TO BROWSER SECURITY // BETTER TO LET USERS CLICK ON THEIR OWN anchor.click[]; window.URL.revokeObjectURL[url]; document.removeChild[anchor];
- Tải dữ liệu lên, lưu trữ trên máy chủ
1// [A] CREATE BLOB OBJECT var myBlob = new Blob[["CONTENT"], {type: "text/plain"}]; // [B] CREATE DOWNLOAD LINK var url = window.URL.createObjectURL[myBlob]; var anchor = document.createElement["a"]; anchor.href = url; anchor.download = "demo.txt"; // [C] "FORCE DOWNLOAD" // NOTE: MAY NOT ALWAYS WORK DUE TO BROWSER SECURITY // BETTER TO LET USERS CLICK ON THEIR OWN anchor.click[]; window.URL.revokeObjectURL[url]; document.removeChild[anchor];
2// [A] CREATE BLOB OBJECT var myBlob = new Blob[["CONTENT"], {type: "text/plain"}]; // [B] CREATE DOWNLOAD LINK var url = window.URL.createObjectURL[myBlob]; var anchor = document.createElement["a"]; anchor.href = url; anchor.download = "demo.txt"; // [C] "FORCE DOWNLOAD" // NOTE: MAY NOT ALWAYS WORK DUE TO BROWSER SECURITY // BETTER TO LET USERS CLICK ON THEIR OWN anchor.click[]; window.URL.revokeObjectURL[url]; document.removeChild[anchor];
3// [A] CREATE BLOB OBJECT var myBlob = new Blob[["CONTENT"], {type: "text/plain"}]; // [B] CREATE DOWNLOAD LINK var url = window.URL.createObjectURL[myBlob]; var anchor = document.createElement["a"]; anchor.href = url; anchor.download = "demo.txt"; // [C] "FORCE DOWNLOAD" // NOTE: MAY NOT ALWAYS WORK DUE TO BROWSER SECURITY // BETTER TO LET USERS CLICK ON THEIR OWN anchor.click[]; window.URL.revokeObjectURL[url]; document.removeChild[anchor];
- Tạo một luồng tệp có thể ghi
4// [A] CREATE BLOB OBJECT var myBlob = new Blob[["CONTENT"], {type: "text/plain"}]; // [B] CREATE DOWNLOAD LINK var url = window.URL.createObjectURL[myBlob]; var anchor = document.createElement["a"]; anchor.href = url; anchor.download = "demo.txt"; // [C] "FORCE DOWNLOAD" // NOTE: MAY NOT ALWAYS WORK DUE TO BROWSER SECURITY // BETTER TO LET USERS CLICK ON THEIR OWN anchor.click[]; window.URL.revokeObjectURL[url]; document.removeChild[anchor];
5// [A] CREATE BLOB OBJECT var myBlob = new Blob[["CONTENT"], {type: "text/plain"}]; // [B] CREATE DOWNLOAD LINK var url = window.URL.createObjectURL[myBlob]; var anchor = document.createElement["a"]; anchor.href = url; anchor.download = "demo.txt"; // [C] "FORCE DOWNLOAD" // NOTE: MAY NOT ALWAYS WORK DUE TO BROWSER SECURITY // BETTER TO LET USERS CLICK ON THEIR OWN anchor.click[]; window.URL.revokeObjectURL[url]; document.removeChild[anchor];
6// [A] CREATE BLOB OBJECT var myBlob = new Blob[["CONTENT"], {type: "text/plain"}]; // [B] CREATE DOWNLOAD LINK var url = window.URL.createObjectURL[myBlob]; var anchor = document.createElement["a"]; anchor.href = url; anchor.download = "demo.txt"; // [C] "FORCE DOWNLOAD" // NOTE: MAY NOT ALWAYS WORK DUE TO BROWSER SECURITY // BETTER TO LET USERS CLICK ON THEIR OWN anchor.click[]; window.URL.revokeObjectURL[url]; document.removeChild[anchor];
7// [A] CREATE BLOB OBJECT var myBlob = new Blob[["CONTENT"], {type: "text/plain"}]; // [B] CREATE DOWNLOAD LINK var url = window.URL.createObjectURL[myBlob]; var anchor = document.createElement["a"]; anchor.href = url; anchor.download = "demo.txt"; // [C] "FORCE DOWNLOAD" // NOTE: MAY NOT ALWAYS WORK DUE TO BROWSER SECURITY // BETTER TO LET USERS CLICK ON THEIR OWN anchor.click[]; window.URL.revokeObjectURL[url]; document.removeChild[anchor];
- Trong NodeJS, chỉ cần sử dụng mô-đun hệ thống tệp –
8// [A] CREATE BLOB OBJECT var myBlob = new Blob[["CONTENT"], {type: "text/plain"}]; // [B] CREATE DOWNLOAD LINK var url = window.URL.createObjectURL[myBlob]; var anchor = document.createElement["a"]; anchor.href = url; anchor.download = "demo.txt"; // [C] "FORCE DOWNLOAD" // NOTE: MAY NOT ALWAYS WORK DUE TO BROWSER SECURITY // BETTER TO LET USERS CLICK ON THEIR OWN anchor.click[]; window.URL.revokeObjectURL[url]; document.removeChild[anchor];
Điều đó bao gồm những điều cơ bản, nhưng chúng ta hãy xem qua các ví dụ chi tiết trong hướng dẫn này – Đọc tiếp
ⓘ Tôi đã bao gồm một tệp zip chứa tất cả mã nguồn ví dụ khi bắt đầu hướng dẫn này, vì vậy bạn không cần phải sao chép-dán mọi thứ… Hoặc nếu bạn chỉ muốn đi sâu vào
TRANG TRÌNH BÀY NHANH
Tải xuống & Ghi chú
TẢI XUỐNG & LƯU Ý
Đầu tiên, đây là liên kết tải xuống mã ví dụ như đã hứa
GHI CHÚ NHANH
Nếu bạn phát hiện ra một lỗi, hãy bình luận bên dưới. Tôi cũng cố gắng trả lời các câu hỏi ngắn, nhưng đó là một người so với cả thế giới… Nếu bạn cần câu trả lời gấp, vui lòng xem danh sách các trang web của tôi để được trợ giúp về lập trình
MÃ VÍ DỤ TẢI XUỐNG
Nhấp vào đây để tải xuống mã nguồn, tôi đã phát hành mã nguồn theo giấy phép MIT, vì vậy vui lòng xây dựng trên mã nguồn đó hoặc sử dụng mã nguồn đó trong dự án của riêng bạn
LƯU TẬP TIN TRONG JAVASCRIPT
Được rồi, bây giờ chúng ta hãy tìm hiểu các cách khác nhau để lưu tệp trong Javascript
PHƯƠNG PHÁP 1] SỬ DỤNG FILE SAVER
1 trình bảo vệ tệp. js
// [B] "SAVE AS"
var myFile = new File[["CONTENT"], "demo.txt", {type: "text/plain;charset=utf-8"}];
saveAs[myFile];
Cảm ơn chúa, ai đó đã làm tất cả công việc khó khăn. Đây là một trong những cách dễ nhất và “an toàn nhất” trên nhiều trình duyệt để lưu tệp –
- Chỉ cần tải
9 từ CDN// [A] CREATE BLOB OBJECT var myBlob = new Blob[["CONTENT"], {type: "text/plain"}]; // [B] CREATE DOWNLOAD LINK var url = window.URL.createObjectURL[myBlob]; var anchor = document.createElement["a"]; anchor.href = url; anchor.download = "demo.txt"; // [C] "FORCE DOWNLOAD" // NOTE: MAY NOT ALWAYS WORK DUE TO BROWSER SECURITY // BETTER TO LET USERS CLICK ON THEIR OWN anchor.click[]; window.URL.revokeObjectURL[url]; document.removeChild[anchor];
- Tạo một đối tượng _______110 và đưa nó vào
11// [A] CREATE BLOB OBJECT var myBlob = new Blob[["CONTENT"], {type: "text/plain"}]; // [B] CREATE DOWNLOAD LINK var url = window.URL.createObjectURL[myBlob]; var anchor = document.createElement["a"]; anchor.href = url; anchor.download = "demo.txt"; // [C] "FORCE DOWNLOAD" // NOTE: MAY NOT ALWAYS WORK DUE TO BROWSER SECURITY // BETTER TO LET USERS CLICK ON THEIR OWN anchor.click[]; window.URL.revokeObjectURL[url]; document.removeChild[anchor];
PHƯƠNG PHÁP 2] TẠO TẬP TIN TỪ BLOB & FORCE DOWNLOAD
2-blob-tải xuống. html
// [A] CREATE BLOB OBJECT
var myBlob = new Blob[["CONTENT"], {type: "text/plain"}];
// [B] CREATE DOWNLOAD LINK
var url = window.URL.createObjectURL[myBlob];
var anchor = document.createElement["a"];
anchor.href = url;
anchor.download = "demo.txt";
// [C] "FORCE DOWNLOAD"
// NOTE: MAY NOT ALWAYS WORK DUE TO BROWSER SECURITY
// BETTER TO LET USERS CLICK ON THEIR OWN
anchor.click[];
window.URL.revokeObjectURL[url];
document.removeChild[anchor];
Do các hạn chế về bảo mật, Javascript phía máy khách không thể truy cập trực tiếp vào hệ thống tệp. Tức là không ghi và tải tệp trực tiếp trên máy tính của người dùng. Nhưng đây là cách làm vòng vo – Tạo một đối tượng BLOB [nhị phân] để chứa tất cả dữ liệu, sau đó đặt liên kết tải xuống cho nó
PHƯƠNG PHÁP 3] TẢI BLOB LÊN MÁY CHỦ
JAVASCRIPT
3a-blob-tải lên. html
// [A] CREATE BLOB OBJECT
var myBlob = new Blob[["CONTENT"], {type: "text/plain"}];
// [B] CREATE DOWNLOAD LINK
var url = window.URL.createObjectURL[myBlob];
var anchor = document.createElement["a"];
anchor.href = url;
anchor.download = "demo.txt";
// [C] "FORCE DOWNLOAD"
// NOTE: MAY NOT ALWAYS WORK DUE TO BROWSER SECURITY
// BETTER TO LET USERS CLICK ON THEIR OWN
anchor.click[];
window.URL.revokeObjectURL[url];
document.removeChild[anchor];
1
PHP
3b-blob-tải lên. php
// [A] CREATE BLOB OBJECT
var myBlob = new Blob[["CONTENT"], {type: "text/plain"}];
// [B] CREATE DOWNLOAD LINK
var url = window.URL.createObjectURL[myBlob];
var anchor = document.createElement["a"];
anchor.href = url;
anchor.download = "demo.txt";
// [C] "FORCE DOWNLOAD"
// NOTE: MAY NOT ALWAYS WORK DUE TO BROWSER SECURITY
// BETTER TO LET USERS CLICK ON THEIR OWN
anchor.click[];
window.URL.revokeObjectURL[url];
document.removeChild[anchor];
5Đây là một giải pháp thay thế cho tải xuống BLOB ở trên – Thay vào đó, chúng tôi tải BLOB lên và lưu nó trên máy chủ
PHƯƠNG PHÁP 4] DÒNG TẬP TIN CÓ THỂ GHI
4-tệp-luồng. html
// [A] CREATE BLOB OBJECT
var myBlob = new Blob[["CONTENT"], {type: "text/plain"}];
// [B] CREATE DOWNLOAD LINK
var url = window.URL.createObjectURL[myBlob];
var anchor = document.createElement["a"];
anchor.href = url;
anchor.download = "demo.txt";
// [C] "FORCE DOWNLOAD"
// NOTE: MAY NOT ALWAYS WORK DUE TO BROWSER SECURITY
// BETTER TO LET USERS CLICK ON THEIR OWN
anchor.click[];
window.URL.revokeObjectURL[url];
document.removeChild[anchor];
6Vâng, thời đại của bà già của Internet đã qua. Chúng tôi có thể tạo trình xử lý tệp và luồng tệp trên máy tính của người dùng, sử dụng nó để lưu tệp. Nhưng thao tác này vẫn mở ra hộp thoại “save file as”, chúng ta không thể lưu trực tiếp mà không có sự cho phép của người dùng
P. S. Tính năng này sẽ chỉ hoạt động trên Chrome, Edge và Opera tại thời điểm viết bài
PHƯƠNG PHÁP 5] VIẾT VÀO TẬP TIN TRONG NODEJS
5 nút. js
// [A] CREATE BLOB OBJECT
var myBlob = new Blob[["CONTENT"], {type: "text/plain"}];
// [B] CREATE DOWNLOAD LINK
var url = window.URL.createObjectURL[myBlob];
var anchor = document.createElement["a"];
anchor.href = url;
anchor.download = "demo.txt";
// [C] "FORCE DOWNLOAD"
// NOTE: MAY NOT ALWAYS WORK DUE TO BROWSER SECURITY
// BETTER TO LET USERS CLICK ON THEIR OWN
anchor.click[];
window.URL.revokeObjectURL[url];
document.removeChild[anchor];
7Vâng, nó đơn giản một cách ngu ngốc. Chỉ cần tải mô-đun hệ thống tệp
// [A] CREATE BLOB OBJECT
var myBlob = new Blob[["CONTENT"], {type: "text/plain"}];
// [B] CREATE DOWNLOAD LINK
var url = window.URL.createObjectURL[myBlob];
var anchor = document.createElement["a"];
anchor.href = url;
anchor.download = "demo.txt";
// [C] "FORCE DOWNLOAD"
// NOTE: MAY NOT ALWAYS WORK DUE TO BROWSER SECURITY
// BETTER TO LET USERS CLICK ON THEIR OWN
anchor.click[];
window.URL.revokeObjectURL[url];
document.removeChild[anchor];
12 và sử dụng hàm // [A] CREATE BLOB OBJECT
var myBlob = new Blob[["CONTENT"], {type: "text/plain"}];
// [B] CREATE DOWNLOAD LINK
var url = window.URL.createObjectURL[myBlob];
var anchor = document.createElement["a"];
anchor.href = url;
anchor.download = "demo.txt";
// [C] "FORCE DOWNLOAD"
// NOTE: MAY NOT ALWAYS WORK DUE TO BROWSER SECURITY
// BETTER TO LET USERS CLICK ON THEIR OWN
anchor.click[];
window.URL.revokeObjectURL[url];
document.removeChild[anchor];
13. Để tải tệp, chúng tôi sử dụng hàm // [A] CREATE BLOB OBJECT
var myBlob = new Blob[["CONTENT"], {type: "text/plain"}];
// [B] CREATE DOWNLOAD LINK
var url = window.URL.createObjectURL[myBlob];
var anchor = document.createElement["a"];
anchor.href = url;
anchor.download = "demo.txt";
// [C] "FORCE DOWNLOAD"
// NOTE: MAY NOT ALWAYS WORK DUE TO BROWSER SECURITY
// BETTER TO LET USERS CLICK ON THEIR OWN
anchor.click[];
window.URL.revokeObjectURL[url];
document.removeChild[anchor];
14 tương ứng
BIT & LIÊN KẾT HỮU ÍCH
Đó là tất cả cho hướng dẫn này và đây là một phần nhỏ về một số tính năng bổ sung và liên kết có thể hữu ích cho bạn
KIỂM TRA TÍNH TƯƠNG THÍCH
- Blob – CanIUse
- Tạo luồng tệp có thể ghi – CanIUse
- Hiển thị bộ chọn tệp lưu – CanIUse
- Chức năng mũi tên – CanIUse
Không phải tất cả các trình duyệt đều hỗ trợ kiểu dữ liệu BLOB cũng như tất cả các tính năng ghi tệp. Vì vậy, tốt nhất bạn nên thực hiện một số kiểm tra trước khi bật các tính năng ninja của mình – Tôi khuyên bạn nên sử dụng Modernizr để phát hiện xem trình duyệt có hỗ trợ một số tính năng nhất định hay không
LIÊN KẾT và THAM KHẢO
- Javascript Blob – MDN
- Các loại MIME – SitePoint
- Tạo URL đối tượng và Thu hồi URL đối tượng – MDN
- Dữ liệu biểu mẫu – MDN
- Tìm nạp API – MDN
- Viết tệp trong NodeJS – Code Boxx
VIDEO HƯỚNG DẪN
BẢNG CHEAT INFOGRAPHIC
Cảm ơn bạn đã đọc, và chúng tôi đã đi đến phần cuối của hướng dẫn này. Tôi hy vọng rằng nó đã giúp bạn với dự án của bạn và nếu bạn muốn chia sẻ bất cứ điều gì với hướng dẫn này, xin vui lòng bình luận bên dưới. Chúc may mắn và mã hóa hạnh phúc