2015-03-22 13 views
6

Questo è per un userscript che sto facendo con JS + jQuery. Mi chiedo se sia possibile trovare il nome del file dato l'URL.Come scaricare un file tramite URL, quindi ottenere il suo nome

E 'in forma di:

http://example.org/download.php?action=download&id=1234 

e poi quel collegamento scarica un file, ad esempio "cat.jpg".

Come individuare il nome del file? Non è necessario salvare il file sul computer degli utenti: è sufficiente trovare il nome del file.

Sono aperto all'utilizzo di qualsiasi libreria JS, ma devo assicurarmi che il file non sia effettivamente salvato nel computer degli utenti (o forse è stato appena salvato in una cartella temporanea da qualche parte).

+0

Suppongo che tu stia facendo questo con una chiamata AJAX. Tale informazione verrebbe fornita solo nel 'Response Header' che puoi ottenere dal metodo nel post di questo tizio http://stackoverflow.com/questions/1557602/jquery-and-ajax-response-header Chiamata AJAX per avviare il download, ottenere le intestazioni di risposta, analizzarle per il nome file, quindi terminare la chiamata AJAX non appena si ottiene ciò che si desidera. A meno che tu non abbia il controllo sul file 'download.php' e possa aggiungere la funzionalità per fornire solo il nome del file tramite download' id' senza scaricare il file, questo è l'unico modo. – FactoryAidan

risposta

24

La cosa semplice che è possibile fare è effettuare la richiesta HEAD, in modo che in realtà non si scarichi il file ma solo le intestazioni di risposta. Da lì si ottiene l'intestazione Content-Disposition che contiene il campo filename.

Qualcosa di simile a jQuery:

$.ajax({ 
    type: "HEAD", 
    url: 'http://example.org/download.php?action=download&id=1234', 
    success: function(message, text, response) { 
     var header = response.getResponseHeader('Content-Disposition'); 
     console.log(header); 
    } 
}); 

header variabile sarà qualcosa di simile attachment; filename="image.jpg". Ora è facile estrarre la parte del nome file:

var filename = header.match(/filename="(.+)"/)[1]; // image.jpg 
+0

Fantastico. Grazie. Non ero a conoscenza che i nomi dei file erano nell'intestazione. Risolto il mio problema – HarryJ2213

Problemi correlati