2015-10-06 14 views
7

Tüm platformlarda dağıtılmak üzere bir NodeJS Electron App yazıyorum. Sunucumdan sağlanan dosya ile Farklı Kaydet iletişim kutusunu açmak istediğim bir indirme düğmem var. Bunu yapmanın en iyi yolu bilen var mı?Bir Elektron Uygulamasında Farklı Kaydet iletişim kutusunu nasıl görüntüleyebilirim?

  • dosyanın bulunduğu yere window.location.href Ayar: Burada

    yerel düğüm uygulamasını çalıştıran ancak elektron ambalajlayıcı ile uygulamayı paketlenmiş sonra başarısız İşten olduğunu çalıştık şeylerdir ambalajlı mac app çalıştırırken dosyası

konumuna gizli bir iframe src ayarlanması

  • , "-başarısız oldu-yük" olay ateş ve gösterilmesini iletişim Farklı Kaydet önler. Ağ isteklerine bakıldığında, dosyanın sunucudan başarıyla alındığını görebiliyorum. "Başarısızlık-yükü" olayının neden kovulduğunu anlayamıyorum. https://github.com/atom/electron/blob/master/docs/api/dialog.md

  • cevap

    3

    elektron dokümanlar üzerinde bu sayfaya göz atın bir bölüm benzer bir işleve sahip kaydetmek iletişim kutusundan URL'yi kullanabilirsiniz yaklaşık dialog.showSaveDialog Sonra

    yoktur Bu yere kaydetmek için aşağıya.

    session.on('will-download', function(event, item, webContents) { 
        event.preventDefault(); 
        require('request')(item.getUrl(), function(data) { 
        require('fs').writeFileSync('/somewhere', data); 
        }); 
    }); 
    

    HTML düğmesi bu sayfayı https://github.com/atom/electron/blob/master/docs/api/session.md

    +0

    teşekkür ederiz. Çalışmak için bu yöntemi alamadım. Sanırım, ana süreçte kütüphanecilere sürecin işleyişine ihtiyaç duyuyordum. Orijinal yaklaşımım tüm düğüm modüllerimi öldürüp yeniden yükledikten sonra çalıştı. Soruna neyin neden olduğuna tam olarak emin değilim, ama şimdi çalışıyor! – djsosofresh

    0

    Bulundu:

    <button onclick='myUrlSaveAs("http://www.example.com/path/to/file.jpg")'>Save As</button> 
    

    senin Javascript dosyasında: Cevabınız için

    // Include in the render side 
    var elerem = require('electron').remote; 
    var dialog = elerem.dialog; 
    var app = elerem.app; 
    
    var http = require('http'); 
    var fs = require('fs'); 
    var path = require('path'); 
    
    
    function myUrlSaveAs(remoteUrl){ 
        // app.getPath("desktop")  // User's Desktop folder 
        // app.getPath("documents")  // User's "My Documents" folder 
        // app.getPath("downloads")  // User's Downloads folder 
    
        var toLocalPath = path.resolve(app.getPath("desktop"), path.basename(remoteUrl) 
    
        var userChosenPath = dialog.showSaveDialog({ defaultPath: toLocalPath }); 
    
        if(userChosenPath){ 
         download (remoteUrl, userChosenPath, myUrlSaveAsComplete) 
        } 
    
    
    } 
    
    function myUrlSaveAsComplete(err){ 
        alert("done"); 
    } 
    
    
    function download (url, dest, cb) { 
        var file = fs.createWriteStream(dest); 
        var request = http.get(url, function(response) { 
         response.pipe(file); 
         file.on('finish', function() { 
          file.close(cb); // close() is async, call cb after close completes. 
         }); 
        }).on('error', function(err) { // Handle errors 
         fs.unlink(dest); // Delete the file async. (But we don't check the result) 
         if (cb) cb(err.message); 
        }); 
    }; 
    
    +0

    Bu kod snippet'inin soruyu nasıl çözeceğini açıklamanız gerekebilir. –

    İlgili konular