2013-07-17 27 views
17

Javascript kullanarak ikili dosyaları indirmek istiyorum.Javascript ile İkili Dosyaları İndirin

İkili veriyi döndüren bir REST hizmetim var ve dosya uzantısından hangisi olursa olsun, ikili dosyayı göstermenin mümkün olup olmadığını bilmek istiyorum.

Bu benim şimdiki kodudur:

var xhr = new XMLHttpRequest; 
xhr.open("GET", requestUrl); 
xhr.addEventListener("load", function() { 
    var ret = []; 
    var len = this.responseText.length; 
    var byte; 
    for (var i = 0; i < len; i++) { 
     byte = (this.responseText.charCodeAt(i) & 0xFF) >>> 0; 
     ret.push(String.fromCharCode(byte)); 
    } 
    var data = ret.join(''); 
    data = "data:application/pdf;base64," + btoa(data); 

    window.open(data, '_blank', 'resizable, width=1020,height=600'); 
}, false); 

xhr.setRequestHeader("Authorization", "Bearer " + client.accessToken); 
xhr.overrideMimeType("octet-stream; charset=x-user-defined;"); 
xhr.send(null); 

teşekkürler!

+1

"Göster" ne anlama geliyor? – Tommi

+0

Bu cevabı kontrol etmelisiniz: http://stackoverflow.com/questions/9620497/download-binary-data-as-a-file-via-javascript –

+0

Sadece görüntüleri indirmek ister misiniz? Pijamalar ve jpeg'ler gibi mi? –

cevap

34

XMLHttpRequest adresindeki MDN makalesine bakın.

siz şu yapabileceğini ArrayBuffer için XMLHttpRequest tepkisini ayarlarsanız:

var xhr = new XMLHttpRequest(); 
xhr.open("GET", requestUrl); 
xhr.responseType = "arraybuffer"; 

xhr.onload = function() { 
    if (this.status === 200) { 
     var blob = new Blob([xhr.response], {type: "application/pdf"}); 
     var objectUrl = URL.createObjectURL(blob); 
     window.open(objectUrl); 
    } 
}; 
xhr.send(); 

Seçenek 2: XMLHttpRequest cevabı olarak
Şunları kullanabilirsiniz Blob.

var xhr = new XMLHttpRequest(); 
xhr.open("GET", requestUrl); 
xhr.responseType = "blob"; 

xhr.onload = function() { 
    onDownloaded(this); 
}; 
xhr.send(); 

Seçenek 3: kolayca yapabilirsiniz
sadece indirmek istiyorsanız ve "gösteri" görüntüleri Sonra belki FileSystem kaydetmek (FileSystem API)

Bu gibi görünebilir böyle:

var img = new Image(); 

// add the onload event before setting the src 
img.onload = function() { 
    onImageDownloaded(img); 
} 

// start the download by setting the src property 
img.src = requestUrl 
+0

Cevabınız için teşekkürler. Ama benim sorunum biraz farklı. Pdfs veya görüntüleri indirebilirim, ancak ikili veriyi döndüren REST servisini aradığımda, dosyanın türünün ne olduğunu bilmiyorum. –

+1

Dosyayı indirmeden önce dosya türünü ve belki de dosya adını (UI) almak için başka bir istekte bulunabilirsiniz. –

+0

Şu an üzerinde çalışıyorum. Teşekkürler –

İlgili konular