Cách duy nhất tôi biết là thủ thuật được FileSaver.js sử dụng :
- Tạo một
<a>
thẻ ẩn .
- Đặt
href
thuộc tính của nó cho URL của blob.
- Đặt
download
thuộc tính của nó thành tên tệp.
- Bấm vào
<a>
thẻ.
Dưới đây là một ví dụ đơn giản ( jsfiddle ):
var saveData = (function () {
var a = document.createElement("a");
document.body.appendChild(a);
a.style = "display: none";
return function (data, fileName) {
var json = JSON.stringify(data),
blob = new Blob([json], {type: "octet/stream"}),
url = window.URL.createObjectURL(blob);
a.href = url;
a.download = fileName;
a.click();
window.URL.revokeObjectURL(url);
};
}());
var data = { x: 42, s: "hello, world", d: new Date() },
fileName = "my-download.json";
saveData(data, fileName);
Tôi đã viết ví dụ này chỉ để minh họa ý tưởng, trong mã sản xuất sử dụng FileSaver.js thay thế.
Ghi chú
- Các trình duyệt cũ hơn không hỗ trợ thuộc tính "tải xuống", vì đó là một phần của HTML5.
- Một số định dạng tệp được trình duyệt coi là không an toàn và tải xuống không thành công. Lưu tệp JSON với phần mở rộng txt hoạt động với tôi.