2017-05-23 102 views
13

Verileri depolamak için yerel bir in-browser veritabanı kullanıyorum. Ancak, kullanıcılara bu verileri CSV'ye aktarma olanağı vermek istiyorum.Çok sayıda içeriğe sahip yerel dosya indirme

Google'da arama yaparken, veri URL'leri olan bir çözüm buldum - veriyi URL ile hazırlayın. Ancak benim durumumda, sayfa (link) oluşturulduğunda her defasında 1MB veri üretiliyor. Javascript'ten dosya indirmeme izin verecek alternatif bir çözüm var, ancak içeriği önceden hazırlamamı gerektirmiyor - sadece kullanıcı gerçekten bağlantıyı tıkladığında?

durumda ben bir damla deneyin

+0

...? – CBroe

+0

Doğru anladıysam, kullanıcı başka bir düğmeyi tıkladığında veri-url ile bağlantı oluşturmayı mı önerirsin? O zaman tıklamak için biraz JS ateşleyin? – kubal5003

+1

Veri URI'sini önce "location.href" olarak atamayı ve tarayıcıların bunu yapmanıza izin verip vermeyeceğini görmeyi denedim ... – CBroe

cevap

13

.. benim uygulama oluşturmak ve Tepkisiz kullanıyorum önemli.

(hayır, o şekilde değil)

demo

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

CSV JSON dönüştürmek gerekir?

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); 

dosyası için bir isim var mı gerekiyor?

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(); 

Dosya adı ve JSON?

demo

tam aşağı yukarı tıklama aynı şey (?)/Talep yapan sadece birine hazırlanmak-açık çözüm (Ben zaten var galiba?) Dönüştürme konusundaki sorunun
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

filesaver.js kütüphanesi sizin için bir çok şey yapmanıza olanak sağlar https://github.com/eligrey/FileSaver.js, repodaki demo biraz bozuk, ancak Ive burada çoğaltılmış: https://codepen.io/Anon/kalem/rwVWZQ –