2009-09-27 2 views
12

Вот что я надеюсь сделать:Получить размер запрошенного файла с помощью AJAX

Я хочу отправить AJAX запрос в файл (желательно с JQuery), и после загрузки файла, определить размер запрошенного файла.

После небольшого поиска в Google ясно, что я даже не имею правильного представления о правильном вопросе, чтобы попросить понять это. Любая помощь будет принята с благодарностью.

ответ

37

Вы можете сделать запрос HTTP HEAD и получить размер файла приблизительно, прочитав HTTP-заголовок Content-Length.

Этот вид запроса используется для получения метаинформации о URL-адресе, подразумеваемом запросом, без передачи какого-либо его содержимого в ответ.

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

+ upvote, это должен быть реальный ответ :) –

+0

Спасибо @meder! – CMS

+0

Я согласен - на самом деле я могу использовать другой метод для межобластных функций, но это действительно тот ответ, который я искал, когда я спросил. – Peter

2

Вы можете создать серверную команду, которая берет путь и имя файла, открывает файл, чтобы получить длину, и отправляет его обратно клиенту. Как вы это сделаете, это зависит от того, какой серверный язык вы используете. Это тот тип действий, который вы ищете?

+0

Hm ... Итак, я мог бы использовать ajax для вызова php-файла, который загрузил бы содержимое файла, который я действительно хочу, выяснить, насколько он большой, а затем вернуть содержимое файла и размер в javascript , И делать это так, чтобы я мог без проблем называть контент из другого домена. Это звучит совершенно блестяще - совсем не то, что я думал, что искал, но фантастическое решение. – Peter

+0

Да, я сделал это в прошлом с Java при создании авторизованного контроллера загрузки. Вы также можете посмотреть предложение CMS - я никогда не думал об использовании команды HEAD, но если все, что вам нужно, это размер файла, это может работать еще более блестяще. –

+0

Это единственный ответ, который позволяет избежать кодирования gzip, в результате чего длина контента не будет отправлена ​​обратно. – user3338098

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

Вы в основном сделать запрос ГОЛОВКИ HTTP и запроса Content-Length, которая возвращает X байт.

+0

Если используется кодировка gzip, заголовок длины содержимого не отправляется – user3338098

Смежные вопросы