2011-01-23 21 views
6

Bazı kullanıcı etkileşimlerinin sonucu olarak bir CSV dosyası oluşturmak ve sonra kullanıcının onu indirmesini istemek istiyorum. Bunu nasıl yapabilirim?Google Chrome Uzantısında indirmek için dosya nasıl oluşturulur?

Doğrudan JS'de mümkün olduğunu düşünmüyorum, fakat belki de Chrome bana bazı ayrıcalıklar veriyor?

+0

ASP.NET'te yaptık. Hangi teknolojileri kullanıyorsunuz? –

+0

@Jon: Chrome uzantıları JS'de yazılmıştır ... başka seçeneklerim olduğunu düşünmüyorum. – mpen

cevap

2

Chrome, bu konuda herhangi bir yardım sağlamaz, ancak sahnelerin ardında bir flash bileşeni kullanan downloadify js kütüphanesini kullanarak dosya kaydetme diyaloğunu tetikleyebilmeniz gerekir.

+0

Demoyu denediğimde Firefox'u çökertiyor gibi görünüyor. Chrome çökmez ... ... sanırım bununla yaşayabilirim. – mpen

5

Artık bir dosyayı indirmek için HTML5 File API kullanabilirsiniz. Bu gelişme hala, ama o dosya indirmek için bir BlobBuilder kullanmak ve kullanımını yönlendirebilirsiniz:

http://www.html5rocks.com/tutorials/file/filesystem/

+0

Chrome 10 bunu destekliyor mu? – mpen

+0

Evet, Chrome 10'da "window.webkitURL.createObjectURL" olarak değiştirdiler. Cevabımı bunu yansıtmak için düzenledim. Bu yaklaşımla ilgili tek sorun (yakında çözülecektir) dosya adını kontrol edememenizdir. Müfettişinizde deneyin. –

+0

"Yerel kaynağa yüklenemedi: blob: null/6b2c341a-ad40-48b2-9755-1b7134832d39". Bunu adres çubuğuma kopyalayabilir ve dosyayı indirebilirsiniz, ancak Chrome neden buna izin vermiyor? – mpen

1
: Dosya bir API ile ilgili daha fazla bilgi için

var bb = new BlobBuilder(); 
bb.append(csvContents); 
var blob = bb.getBlob(); 
location.href = window.webkitURL.createObjectURL(blob); 

, HTML5Rocks harika bir eğitici vardır

Tam olarak aynı yeni oluşturulmuş bir dosya yapmalı ve indirme işlemini Chrome uzantısında zorunlu kılmalıydım. Burada ES6 kullanarak bunu yaparken bir kod parçacığı ve tavsiye edilen yöntemler şunlardır:

let docContent = ... /* your content */; 
let doc = URL.createObjectURL(new Blob([docContent], {type: 'application/octet-binary'})); 
chrome.downloads.download({ url: doc, filename: filename, conflictAction: 'overwrite', saveAs: true }); 

Ayrıca manifest.json uygun bir ayrıcalık beyan etmek zorunda:

"permissions" : ["downloads"] 
İlgili konular