2016-02-29 28 views
7

Sto lavorando a un'app che alla prima esecuzione dovrà scaricare file (immagini jpg/png) tramite API dal Web e quindi archiviarli localmente in modo che la connessione online non sia necessario più (l'utente può eseguire l'aggiornamento quando è online e scaricare i dati più recenti tramite API se ci saranno aggiornamenti disponibili).Scaricare e archiviare i file all'interno dell'app electron

Sono consapevole del fatto che è molto raro il funzionamento dell'app desktop, ma l'obiettivo principale è sincronizzare i dati dell'app desktop con l'app Web.

Finora, ho trovato un plug-in npm request (link) per verificare se l'utente è connesso a Internet o meno.

Non sono sicuro che sia possibile scaricare e archiviare i file all'interno dell'app electron (quindi sarà invisibile all'esterno dell'app)? Potete consigliare plugin/strumenti necessari per raggiungere questo obiettivo?

Qualsiasi aiuto sarà apprezzato.

+0

Che tipo di dati stai scaricando? Direi che è abbastanza inusuale che le app lo facciano nel modo che hai descritto. Suggerisco di salvare tutti i dati scaricati nella home directory dell'utente (ad es./Home/myuser/myapp in Linux). –

+0

Ho aggiornato la domanda. Il motivo del download dei dati è che i dati cambiano in modo dinamico tramite l'app Web che gestisce tutti i dati che vengono poi distribuiti ad altre app Web e mobili. Ora il client vuole anche la versione desktop di esso. – mrmnmly

risposta

6

Bene, è possibile utilizzare lo snippet da this answer e farlo in modo nodo.

var http = require('http'); 
var fs = require('fs'); 
var app = require('remote').require('app') 

var file = fs.createWriteStream(app.getDataPath() + "externalFiles/file.jpg"); 
var request = http.get("http://url-to-api/some-image.jpg", function(response) { 
    response.pipe(file); 
}); 

E si potrebbe utilizzare il App Data Path per la memorizzazione dei file. Ovviamente, dovresti analizzare il nome del file dall'URL e quindi sei pronto per partire.

Si potrebbe anche usare contenuti web

https://github.com/atom/electron/blob/master/docs/api/web-contents.md

Allora la vostra applicazione avrebbero lavorato come un browser, e il supporto non in linea dovrebbero essere aggiunti utilizzando l'archiviazione locale o di qualche altre tecniche.

UPDATE:

come oggi ci sono un paio di pacchetti che possono aiutare con questo come questo https://github.com/sindresorhus/electron-dl