2015-10-06 6 views
7

मैं सभी प्लेटफार्मों पर वितरित करने के लिए एक नोडजेएस इलेक्ट्रॉन ऐप लिख रहा हूं। मेरे पास एक डाउनलोड बटन है जिसे मैं सर्वर से प्रदान की जा रही फ़ाइल के साथ एक सेव करें संवाद खोलना चाहता हूं। क्या कोई इसे करने का सबसे अच्छा तरीका जानता है?मैं एक इलेक्ट्रॉन ऐप में एक सेव के रूप में संवाद कैसे प्रदर्शित कर सकता हूं?

  • फ़ाइल के स्थान पर window.location.href स्थापना:

    यहाँ बातें मैं कोशिश की है कि काम जब नोड एप्लिकेशन स्थानीय स्तर पर चल रहा है, लेकिन असफल होने के बाद मैं इलेक्ट्रॉन बंडल के साथ एप्लिकेशन को पैक कर रहे हैं

  • फ़ाइल

के स्थान पर एक छिपा iframe के स्रोत की स्थापना जब पैक मैक अनुप्रयोग चल रहा है, "था-असफल लोड" घटना निकाल दिया और प्रदर्शित होने से संवाद के रूप में सहेजें रोकता है। नेटवर्क अनुरोधों को देखते समय, मैं देख सकता हूं कि फ़ाइल को सर्वर से सफलतापूर्वक पुनर्प्राप्त किया गया है। मुझे लगता है कि "किया गया असफल-लोड" घटना क्यों निकाल दी जा रही है।

उत्तर

3

इलेक्ट्रॉन डॉक्स पर इस पेज पर एक नजर डालें https://github.com/atom/electron/blob/master/docs/api/dialog.md

वहाँ एक अनुभाग के बारे में dialog.showSaveDialog

तो फिर तुम एक समारोह के समान के साथ बचाने के संवाद से URL का उपयोग कर सकते है इसे उस स्थान पर सहेजने के लिए नीचे।

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

यह पेज https://github.com/atom/electron/blob/master/docs/api/session.md

+0

अपने जवाब के लिए धन्यवाद। मैं इस विधि को काम करने में सक्षम नहीं था। मुझे लगता है कि मुझे मुख्य प्रक्रिया में रेंडरर प्रक्रिया बनाम पुस्तकालयों की आवश्यकता के साथ समस्या हो रही थी। मेरे मूल दृष्टिकोण ने मेरे सभी नोड मॉड्यूल को मारने के बाद काम किया और उन्हें पुनः स्थापित किया। निश्चित नहीं है कि समस्या का कारण क्या था, लेकिन अब काम करता है! – djsosofresh

0

एचटीएमएल बटन पर पर मिला: अपने JavaScript फ़ाइल में

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

:

// 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

आपको यह बताने की आवश्यकता हो सकती है कि यह कोड स्निपेट प्रश्न कैसे हल करेगा .. –

संबंधित मुद्दे

 संबंधित मुद्दे