Download di file tramite Ajax

IImanuII

Utente Attivo
10 Giu 2012
390
0
16
Salve ragazzi,
Avete presente il sito www.mega.co.nz ? Bene, vorrei sapere come "replicare" il tipo di download.
Vorrei creare una pagina che mi faccia scaricare il file direttamente premendo download. Se non erro scarica i file in cache e poi li fa scaricare sul pc. Sapete aiutarmi?
 

flameseeker

Utente Attivo
27 Nov 2013
699
0
0
Ho dato un occhiata allo script per il download che usa mega.
Non è una soluzione veloce o facile da realizzare in quanto utilizza davvero differenti tecnologie, alcune molto recenti (come le api filesystem, per dirne una) e prevede un fallback in flash per i vecchi browser che non ne hanno supporto.

Se quello che ti preme è sapere la percentuale di avanzamento del download, allora ti direi di dare un occhio ad XmlHttpRequest 2, in particolare all'evento onprogress tramite cui puoi gestire ad esempio una barra di caricamento visiva per informare l'utente dello status del download. (Il problema rimangono sempre i browser che non hanno supporto a questa tecnologia e dovresti prevedere qualche tipo di soluzione alternativa)
 

IImanuII

Utente Attivo
10 Giu 2012
390
0
16
Grazie per la risposta :D
No in realtà quello che mi preme è far si che il download avvenga prima in cache e poi che il browser lo "sposti". Non mi interessa che funzioni su tutti i browser, ma solo su chrome :) al massimo con PHP riconosco il browser che utilizzano e se non è chrome li avviso.

Inviato dal mio Nexus 4 con Tapatalk 4
 
Ultima modifica:

flameseeker

Utente Attivo
27 Nov 2013
699
0
0
Allora, per fare quella cosa lì mega scarica i dati accumulandoli in forma binaria grazie ad ArrayBuffer, dopo si avvale del nuovo attributo download disponibile per i tag anchor.

Credo sia la preparazione del browser che legge il contenuto (per piccoli file dovrebbe essere istantaneo il processo) dal tag anchor con l'attributo donwload che lo mette in condizione di eseguire un secondo processamento delle informazioni a download concluso.
 

IImanuII

Utente Attivo
10 Giu 2012
390
0
16
OK più o meno ti seguo teoricamente ma non ho idea di come metterla in pratica, è complicato scrivere un codice d'esempio?

Inviato dal mio Nexus 4 con Tapatalk 4
 

flameseeker

Utente Attivo
27 Nov 2013
699
0
0
Appena riesco ci provo, concettualmente l'ho chiaro: nella pratica è una cosa che non ho mai provato.
 

IImanuII

Utente Attivo
10 Giu 2012
390
0
16
Ok ti ringrazio aspetto tue news ^-^

Inviato dal mio Nexus 4 con Tapatalk 4
 

flameseeker

Utente Attivo
27 Nov 2013
699
0
0
Ciao, ho fatto una prova come promesso.
In larga parte è merito del mozilla developer network, che fornisce una serie di infomazioni ed esempi molto interessanti per passare tramite Ajax del contenuto in formato binario.

A quel punto è stato facile applicare il concetto dell'attributo download dell'anchor come ti ho scritto.
Il risultato (che funziona con buona parte dei browser più recenti) è il seguente:
HTML:
<!DOCTYPE HTML>
<html>
<head><title>Ajax Binary Download</title></head>
<body>

<a href="#" id="downloadme">Download File</a>
 
<script>

function download(resource) {
    var a = document.getElementById('downloadme');
    
    var oReq = new XMLHttpRequest();
    oReq.open("GET", resource, true);
    oReq.responseType = "arraybuffer";
    
    resource = resource.split('/');
    var fileName = resource[resource.length-1];

    oReq.onload = function() {
        var blob = new Blob([oReq.response], {type: "image/png"});
        var url = window.URL.createObjectURL(blob);
        
        a.href = url;
        a.download = fileName;
    };

    oReq.send();
}

download('/imgs/image.png');
</script>
</body>
</html>

Due considerazioni, anzi tre:
1. Devi implementare qualche controllo per riconoscere il mime type adeguato del file che ti prefiggi di scaricare, nel mio caso lo scopo dell'esempio era dimostrare la fattibilità del download quindi ho scritto manualmente "image/png".

2. Ovviamente lo script così com'è manca di tutta una serie di controlli preparatori. Ad esempio se scarichi un file voluminoso il download sul link potrebbe non essere pronto prima di un tot di tempo.

3. Restando in tema di file molto voluminosi questo metodo non effettua uno streaming delle informazioni, se vuoi passare files di centinaia di megabyte in questo modo devi dividere il download del file binario in più parti che poi devi ricomporre con javascript prima di infilarlo nell'anchor.


Spero l'esempio ti sia d'aiuto :)
 

IImanuII

Utente Attivo
10 Giu 2012
390
0
16
Ciao, grazie è uno splendido regalo di compleanno!! (Si, oggi faccio ben 26 anni!) Armeggeró nei giorni seguenti per implementarlo con i suggerimenti che mi hai dato. Nel caso avessi problemi, posso ripostare qui? Grazie ancora!!

Inviato dal mio Nexus 4 con Tapatalk 4
 

flameseeker

Utente Attivo
27 Nov 2013
699
0
0
Ciao, grazie è uno splendido regalo di compleanno!! (Si, oggi faccio ben 26 anni!) Armeggeró nei giorni seguenti per implementarlo con i suggerimenti che mi hai dato. Nel caso avessi problemi, posso ripostare qui? Grazie ancora!!

Inviato dal mio Nexus 4 con Tapatalk 4

Accipicchia, auguri allora!
Visto che tecnicamente è sempre lo stesso problema, direi che usare questa discussione come riferimento in caso tu debba postare novità o chiedere altri consigli possa andare.

Unica nota è che io personalmente temo che, per seguirti, in caso, mi ritrovi costretto a dover fare delle prove e dei test e per cui, in quel caso, ti chiederei molta pazienza in quanto il mio tempo libero non è molto.

Soltanto ti consiglio di contattare un moderatore e sistemare due cose: uno il titolo del topic sarebbe più appropriato se descritto come "Download dati binary con Ajax" (o qualcosa di simile); secondo, la discussione andrebbe spostata nel forum javascript > Ajax.
 

IImanuII

Utente Attivo
10 Giu 2012
390
0
16
Ho fatto richiesta a borgo in mp :) E' sempre molto disponibile quando lo legge sicuramente sposterà il topic xD
 

IImanuII

Utente Attivo
10 Giu 2012
390
0
16
Adesso che è nelle mie facoltà ci ho pensato io ;)

Ma ti hanno dato i superpoteri?? :DD

Comunque lo script funziona egregiamente grazie!

Una pignoleria, se volessi implementare la progress bar posso utilizzare l'evento onprogress?

Se mi dici che è complessa come cosa non ci provo nemmeno, però ho già pronto il piano b: al click del bottone download faccio apparire uno "sfondo" trasparente (tipo quelli anti adblock hai presente?) con al centro scritto "Attendere preparazione del download in corso.." così almeno l'utente finale non risulta spiazzato. ;P

Che dici, è complesso l'utilizzo di onprogress? Mi conviene direttamente passare al piano b?
 
Discussioni simili
Autore Titolo Forum Risposte Data
S Download di un file in automatico dopo la sua creazione PHP 2
R Download file multipli da directory php PHP 0
V Servizio design pagina web e download in self contained html file Discussioni Varie 1
MarcoGrazia [PHP] Download di file con errore all'interno. PHP 1
C [PHP] Problema con download file PHP 0
spider81man [PHP] Pulsante SUBMIT per download diretto dei file PHP 9
I [PHP] visualizza file pdf in una cartella e download PHP 7
F [PHP] Download file da campo LongBlob PHP 1
G Javascript e download file Javascript 6
fabryx [PHP] RISOLTO: Download file da web e trasferimento su server PHP 2
romeocharly E' possibile creare un collegamento tra un id di db mysql ed un file per il download? PHP 0
romeocharly Modifca per permettere il download di un file , su 4, a punti raggiunti PHP 0
S come impedire download diretto dei file ma non da pagina web PHP 0
G Forzare il download di un file con PHP PHP 0
D download file pdf da mysql con php PHP 1
F Forzare download file: non mi funziona in nessun modo! PHP 1
M Download file remoto da codice php PHP 3
A Script per download non legge stensione file PHP 1
M Download file di gradi dimensioni. PHP 0
F like download file PHP 2
L Consiglio su download o no di file con php PHP 0
S proteggere download dei file PHP 6
D [risolto] Questo file potrebbe danneggiare il tuo computer - Download con PHP PHP 2
R Download file da host esterno con Curl PHP 0
T Download di file con Progress Bar Sviluppo app per Android 1
Trapano Inserire tastino "download file" PHP 18
E Download file PHP 2
Z evitare il download diretto di file PHP 2
LaKanka Problema download file .gz da directory protetta su altro server PHP 13
K download file su server e registrazione su database Classic ASP 1
P [JSP] Download di file di (quasi) ogni tipo! Java 6
I script download file PHP 2
LaKanka Problema download e file compressi PHP 14
B Download file CSV con Explorer HTML e CSS 1
C cms specifico per upload/download di file Content Management System (CMS) 8
L problema download file PHP 15
S Problemi nel download file xls HTML e CSS 4
A Forzatura del download di un file... PHP 1
C php: al download di un file scrivere il log su file esterno. PHP 1
S Download di un file PHP 0
P download file PHP 1
S Pulsante flash !Help come si fa il download di un file zip? Flash 2
S Come contare i Download file .zip su html HTML e CSS 10
C Problemi di download file .xls HTML e CSS 1
Z download file grandi Hosting 1
D download di file PHP 2
L [DW] impostazioni tabelle + download file HTML e CSS 1
S inserimento file per download HTML e CSS 1
M user agent per il download di api PHP 0
atipika INSERIRE ICONE DOWNLOAD E STAMPA WORDPRESS WordPress 10

Discussioni simili