2017-05-23 23 views
13

Tôi đang sử dụng cơ sở dữ liệu trong trình duyệt cục bộ để lưu trữ dữ liệu. Tuy nhiên, tôi muốn cung cấp cho người dùng khả năng xuất dữ liệu đó sang CSV.Tải xuống tệp cục bộ với nhiều nội dung

Trong khi googling tôi tìm thấy giải pháp với url dữ liệu - chuẩn bị url với dữ liệu. Tuy nhiên trong trường hợp của tôi, đây là> 1MB dữ liệu để tạo ra mỗi lần trang (liên kết) được hiển thị. Có giải pháp thay thế nào cho phép tôi tạo tệp tải xuống từ JavaScript, nhưng không yêu cầu tôi chuẩn bị nội dung trả trước - chỉ khi người dùng thực sự nhấp vào liên kết?

Trong trường hợp tôi đang sử dụng React để xây dựng ứng dụng của mình ..

+0

ở đâu chính xác là vấn đề với chuyển đổi các giải pháp chuẩn bị-trả trước (mà tôi giả sử bạn đã có?) Cho rằng một trong chỉ thực hiện ít nhiều điều tương tự (?) Trên nhấp chuột/nhu cầu ...? – CBroe

+0

Nếu tôi hiểu chính xác bạn đang đề xuất tạo neo bằng url dữ liệu khi người dùng nhấp vào một nút khác? Sau đó bắn một chút JS để thực sự nhấp vào nó? – kubal5003

+1

Tôi sẽ thử chỉ định URI dữ liệu cho 'location.href' trước và xem liệu trình duyệt có cho phép bạn thực hiện điều đó không ... – CBroe

Trả lời

13

Thử một đốm màu.

(không, không phải là loại)

demo

var blob = new Blob(["CSV DATA HERE"], {type: "text/csv"}); 
var url = URL.createObjectURL(blob); 
open(url); 

Cần để chuyển đổi JSON để CSV?

demo

(https://stackoverflow.com/a/14966131/6560716)

var data = [["name1", "city1", "some other info"], ["name2", "city2", "more info"]]; 
var csvContent = ""; 
data.forEach(function(infoArray, index){ 
    dataString = infoArray.join(","); 
    csvContent += index < data.length ? dataString+ "\n" : dataString; 
}); 
var blob = new Blob([csvContent], {type: "text/csv"}); 
var url = URL.createObjectURL(blob); 
open(url); 

Cần phải có một tên cho tập tin?

demo

var blob = new Blob(["CSV DATA HERE"], {type: "text/csv"}); 
var url = URL.createObjectURL(blob); 
var link = document.createElement("a"); 
link.setAttribute("href", url); 
link.setAttribute("download", "filename.csv"); 
document.body.appendChild(link); 
link.click(); 

Tên tệp và JSON?

demo

var data = [["name1", "city1", "some other info"], ["name2", "city2", "more info"]]; 
var csvContent = ""; 
data.forEach(function(infoArray, index){ 
    dataString = infoArray.join(","); 
    csvContent += index < data.length ? dataString+ "\n" : dataString; 
}); 
var blob = new Blob([csvContent], {type: "text/csv"}); 
var url = URL.createObjectURL(blob); 
var link = document.createElement("a"); 
link.setAttribute("href", url); 
link.setAttribute("download", "filename.csv"); 
document.body.appendChild(link); 
link.click(); 
+2

thư viện filesaver.js thực hiện rất nhiều điều này cho bạn https://github.com/eligrey/FileSaver.js, bản demo trong repo bị hỏng một chút, nhưng tôi đã sao chép nó ở đây: https://codepen.io/anon/pen/rwVWZQ –

Các vấn đề liên quan