2009-09-27 13 views
12

Hier ist, was ich hoffe, zu tun:Get Größe der Datei über Ajax angefordert

Ich möchte eine Ajax-Anforderung in eine Datei senden (vorzugsweise mit jQuery) und sobald die Datei geladen wurde, bestimmen die Größe der angeforderten Datei.

Nach ein bisschen Googeln ist es klar, dass ich nicht einmal eine gute Idee von der richtigen Frage habe, um das herauszufinden. Jede Hilfe würde sehr geschätzt werden.

Antwort

37

Sie könnten eine HTTP HEAD Anfrage stellen und eine ungefähre Dateigröße erhalten, indem Sie den Content-Length HTTP Header lesen.

Diese Art von Anfrage wird verwendet, um Meta-Informationen über die von der Anfrage implizierte URL zu erhalten, ohne einen Inhalt davon in der Antwort zu übertragen.

var xhr = $.ajax({ 
    type: "HEAD", 
    url: "path/to/file.ext", 
    success: function(msg){ 
    alert(xhr.getResponseHeader('Content-Length') + ' bytes'); 
    } 
}); 
+0

+ upvote, das sollte die richtige Antwort sein :) –

+0

Danke @meder! – CMS

+0

Ich stimme zu - Ich kann tatsächlich die andere Methode für Cross-Domain-Funktionalität verwenden, aber das ist wirklich die Antwort, die ich suchte, als ich fragte. – Peter

2

Sie könnten einen serverseitigen Befehl erstellen, der den Pfad und den Namen der Datei übernimmt, die Datei öffnet, um die Länge zu erhalten, und die Größe an den Client zurücksendet. Wie Sie es tun, hängt davon ab, welche serverseitige Sprache Sie verwenden. Ist das die Art von Aktion, die Sie suchen?

+0

Hm ... Also, ich könnte Ajax verwenden, um eine PHP-Datei aufzurufen, die den Inhalt der Datei laden würde, die ich eigentlich will, herauszufinden, wie groß es ist, dann geben Sie sowohl den Inhalt der Datei und die Größe zu Javascript . Auf diese Weise würde ich Inhalte aus einer anderen Domäne problemlos aufrufen können. Das hört sich absolut genial an - ganz und gar nicht das, wonach ich gesucht habe, sondern eine fantastische Lösung. – Peter

+0

Ja, das habe ich in der Vergangenheit mit Java gemacht, als ich einen autorisierten Download-Controller erstellt habe. Vielleicht möchten Sie auch den Vorschlag von CMS sehen - ich habe nie daran gedacht, den HEAD-Befehl zu verwenden, aber wenn Sie nur die Dateigröße benötigen, könnte das noch brillanter funktionieren. –

+0

Dies ist die einzige Antwort bisher, die verhindert, dass gzip-Kodierung, die die Inhaltslänge verursacht, nicht zurückgesendet wird. – user3338098

0
var XHRObj = $.ajax({ 
    type:'HEAD', 
    url:'/', 
    success:function(data) { 
     console.log(XHRObj.getResponseHeader('Content-Length')) 
    } 
}) 

Sie tun im Grunde eine HEAD HTTP-Anforderung und die Content-Length-Abfrage, die X Bytes zurückgibt.

+0

Wenn die GZIP-Codierung verwendet wird, wird der Header für die Inhaltslänge nicht gesendet – user3338098