Javascript проверить размер файла - PullRequest
6 голосов
/ 27 октября 2011

Можно ли продолжать проверять с помощью javascript, если размер файла файла на веб-сервере (например, http://www.mysite.com/myfile.js) больше 0 байт и если да, возвращает значение true или false?

Заранее спасибо!

Ответы [ 4 ]

12 голосов
/ 27 октября 2011

Теоретически, вы можете использовать XHR для выдачи HTTP HEAD запроса и проверки Content-Length в заголовках ответа.

A HEAD запрос идентичен обычномуGET запрос кроме сервер НЕ ДОЛЖЕН возвращать фактическое содержимое.Другими словами, сервер отвечает заголовками, которые он попытался бы GET ресурс, но затем останавливает и не отправляет файл.

Однако некоторые серверы отвечают на запрос HEAD с заголовком Content-Length 0 независимо от фактического размера файла.Другие отвечают размером файла.

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

Если это так, получить это значение легко :

$.ajax('/myfile.js', {
    type: 'HEAD',
    success: function(d,r,xhr) {
       fileSize = xhr.getResponseHeader('Content-Length');
    }
});

Обратите внимание, что сервер JSFiddle всегда возвращает 0, когда мы HEAD /, даже если / равен 16916 байтов.

Также обратите внимание, что документы jQuery говорят о параметре типа HTTP-запроса:

Тип запроса ("POST" или "GET"), по умолчанию -"ПОЛУЧИТЬ".Примечание. Здесь также можно использовать другие методы HTTP-запросов, такие как PUT и DELETE, но они поддерживаются не всеми браузерами.

Я только что протестировал эту скрипку в IE 6-10, Firefox 3.6-7, Opera 9-11 и Chrome, и каждый браузер правильно выдал запрос HEAD, так что я не буду беспокоиться об этом смутном утверждении о несовместимости.Больше беспокойства вызывает ответ вашего сервера.

2 голосов
/ 27 октября 2011

Javascript не имеет доступа к файловой системе (к счастью), поэтому я боюсь, что нет.

0 голосов
/ 31 июля 2013

IE: если вы устанавливаете Ie 'Document Mode' в 'Standards', вы можете использовать простой метод javascript 'size', чтобы получить размер загруженного файла.

Установите Ie 'Document Mode' в 'Стандарты ':

<meta http-equiv="X-UA-Compatible" content="IE=Edge">

Затем используйте метод javascript' size 'для получения размера загружаемого файла:

<script type="text/javascript">
    var uploadedFile = document.getElementById('imageUpload');
    var fileSize = uploadedFile.files[0].size;
    alert(fileSize); 
</script>

Другие браузеры: во всех других браузерах вы можете использовать JavaScriptМетод 'size' без проблем.

0 голосов
/ 20 июля 2012

Идея, предложенная Джош3736, великолепна.Только приведенный им пример кода отказывался работать в моем браузере (Chrome 20, Firefox 13, IE 8, Opera 12) по той причине, что я не знаю.

Вот тот, которыйотлично работал в моем случае:

jQuery.ajax
({
    cache: false,
    type: 'HEAD',
    url: 'myfile.js',
    success: function(d,r,xhr){alert('File size is ' + xhr.getResponseHeader('Content-Length') + ' bytes.')},
    error: function(xhr, desc, er){alert('ERROR: "' + xhr.responseText + '"')}
});

Хочу также отметить, что встроенный сервер XAMPP Apache прекрасно работает с запросом HEAD, но, конечно, при запуске на localhost такой запрос блокируется.браузером с сообщением об ошибке: «Локальный хост источника не разрешен Access-Control-Allow-Origin» (пример из Chrome).

...