2015-03-22 8 views
6

Dies ist für ein Userscript, das ich mit JS + jQuery mache. Ich frage mich, ob es möglich ist, den Dateinamen der URL zu finden.Wie lade ich eine Datei per URL herunter und bekomme dann ihren Namen

Es ist in Form von:

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

und lädt dann diese Verbindung eine Datei wie "cat.jpg".

Wie finde ich heraus, wie der Dateiname heißt? Ich muss die Datei nicht wirklich auf dem Computer des Benutzers speichern - muss nur den Namen der Datei finden.

Ich bin offen für die Verwendung von JS-Bibliothek - aber ich muss sicherstellen, dass die Datei nicht tatsächlich auf dem Computer des Benutzers gespeichert ist (oder vielleicht ist es nur in einem temporären Ordner gespeichert).

+0

Ich nehme an, dass Sie dies mit einem AJAX-Aufruf tun. Diese Information würde nur im 'Response Header' zur Verfügung gestellt werden, den Sie von der Methode im Post dieses Kerls bekommen können http://stackoverflow.com/questions/1557602/jquery-and-ajax-response-header Sie werden also ein AJAX-Aufruf zum Initiieren des Downloads, Abrufen der Antwortheader, Analysieren des Dateinamens und Beenden des AJAX-Aufrufs, sobald Sie das gewünschte Ergebnis erhalten. Wenn Sie die Datei 'download.php' nicht selbst steuern können und die Funktion nur den Dateinamen mit dem Download' id' hinzufügen können, ohne die Datei herunterzuladen, ist dies die einzige Möglichkeit. – FactoryAidan

Antwort

24

Die einfache Sache, die Sie tun können, ist, HEAD-Anfrage zu machen, so dass Sie nicht tatsächlich die Datei herunterladen, sondern nur Antwortheader. Von dort erhalten Sie Content-Disposition Header, der filename Feld enthält.

So etwas wie dies in 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 Variable wird so etwas wie attachment; filename="image.jpg" sein. Jetzt ist es einfach, Dateiname Teil zu extrahieren:

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

Fantastisch. Vielen Dank. Ich wusste nicht, dass die Dateinamen auf dem Header stehen. Mein Problem wurde gelöst. – HarryJ2213

Verwandte Themen