2016-04-22 18 views
8

İstemci olarak bir nodeJS programını ve AngularJS web uygulamasını kullanıyorum.AngularJS - CSV'yi indirin ve indirin

tanımlar:

var app = express(); 
var csv = require('express-csv'); 

kodu alın:

"Ekspres-indir" kitaplık kullanıyorum CSV oluşturmak için (https://www.npmjs.com/package/express-csv)

İşte

benim sunucu tarafı kodu

app.get('/exportDB', function(req, res){ 
    res.csv([ 
    ["a", "b", "c"] 
    , ["d", "e", "f"] 
    ]); 

Buraya müşteri kodum:

$http.get("http://"+$localStorage.ip+":"+$localStorage.port+"/exportDB").success(function(response){ 
      // HERE I NEED A WAY TO DOWNLOAD THE RECEIVED CSV 
     }); 

Sunucuya ulaştığını ve diğer her şeyin iyi çalıştığını söylemeye gerek yok, ancak CSV'yi indirmenin bir yolunu bulamadım. Yardım lütfen.

P.S.

istemci tarafı gerçekten orada belirtilmeyen çünkü Prompt a csv file to download as pop up using node.js and node-csv-parser (node module) yinelenen bir kopyası deme. Ayrıca, diğer sorular istemci yerine sunucu tarafında odaklanır. AngularJS istemcisine atıfta bulunan başka bir soru yok.

cevap

2

Sadece gezinebilirsiniz:

location.href = "http://"+$localStorage.ip+":"+$localStorage.port+"/exportDB"; 
+0

Çalışıyor, ancak "exportDB" adlı bir dosyayı sonlandırmadan alıyorum. ('.csv' yi eklediysem, tamam). Dosyayı göndermeden önce sunucuya nasıl adlandırabilirim? –

+0

@ GuyBen-Moshe üstbilgileri res.setHeader ('Content-disposition', 'attachment; filename =' + filename); res.setHeader ('İçerik türü', mimetype); ' – karaxuna

+0

Güzel, çok teşekkürler! –

1

Bir etiket oluşturmak ve üzerine tıklayabilirsiniz:

$http.get("http://"+$localStorage.ip+":"+$localStorage.port+"/exportDB").success(function(response) { 
     var dataURI = 'data:application/octet-stream;base64,' + btoa(response); 
     $('<a></a>').attr({ 
      download: 'db.csv', 
      href: dataURI 
     })[0].click(); 
    }); 
1

csv indirme yolları vardır. İlk yaklaşım, bir etiket oluşturmak ve onu

Aşağıdaki kod verilerinde MIMETYPE Ekle tıklamaktır: uygulama/sekizli-stream

var a = document.createElement('a'); 
a.href = 'data:'+mimeType+';charset=utf-8;base64,' + response; 
a.target = '_blank'; 
a.download = "name the file here"; 
document.body.appendChild(a); 
a.click(); 

Ama bu çözüm IE> 9 ve safari> 6

çalışmıyor safari çapa etiketi için indirme özelliğini takip etmediği için

yüzden safari Eğer filesaver.js

ve IE bu solut kullanabilirsiniz Ben aynı sorunu karşılaştığı

if (window.navigator.msSaveOrOpenBlob){ 
       // base64 string 
       var base64str = response; 

       // decode base64 string, remove space for IE compatibility 
       var newstr =base64str.replace(/\s/g, ''); 
       var binary = atob(newstr); 

       // get binary length 
       var len = binary.length; 

       // create ArrayBuffer with binary length 
       var buffer = new ArrayBuffer(len); 

       // create 8-bit Array 
       var view = new Uint8Array(buffer); 

       // save unicode of binary data into 8-bit Array 
       for (var i = 0; i < len; i++) { 
       view[i] = binary.charCodeAt(i); 
       } 

       // create the blob object with content-type "application/csv"    
       var blob = new Blob([view], { type: mimeType }); 
       window.navigator.msSaveOrOpenBlob(blob, "Name your file here"); 
      } 
2

iyon çalışacağını safari ile Chrome ve Firefox ile iyice çalışmalarla yukarıda bahsedilen çözümler değil,/IE.

hack aşağıdaki dışarı çalıştı ve

var url="http://'+$localStorage.ip+':"+$localStorage.port+'/exportDB'; var form = angular.element("<form action='" + url +"'></form>"); form.submit();

Dosya indirme tarayıcısı kendisi tarafından ele alınacaktır bana-

çalıştı.Aşağıdaki olsa buna sınırlamadır -

  1. Sen javascript try-catch bloğu kullanarak çalıştı Bunun için :(çağrı olsun http hataları (varsa) işlemek mümkün olmayacaktır, ama olmadı
  2. ..sen alışkanlık birim testine :(kod parçası :(çalışan başka bir yaklaşım vardır

muktedir ... iyi çalışmaz ve o -

var url="http://'+$localStorage.ip+':"+$localStorage.port+'/exportDB'; $window.location.href = url;

Öneriler ve Tartışmalar hoş geldiniz!

İlgili konular