如果网络服务器上文件的文件大小(例如http://www.mysite.com/myfile.js)大于0字节,是否可以继续使用javascript进行检查?如果是,则返回true或false值?
提前致谢!
答案 0 :(得分:12)
从理论上讲,您可以使用XHR发出HTTP HEAD
请求并检查响应标头中的Content-Length
。
HEAD
请求与常规GET
请求相同,但服务器不得返回实际内容。换句话说,服务器会回复您尝试GET
资源时的标头,但随后会停止并且不会发送文件。
但是some severs respond HEAD
Content-Length
0
标头为HEAD
,无论文件的实际大小如何。其他人回复文件的大小。
为了实现这一目标,您必须祈祷您的服务器将文件的实际大小返回到$.ajax('/myfile.js', {
type: 'HEAD',
success: function(d,r,xhr) {
fileSize = xhr.getResponseHeader('Content-Length');
}
});
请求。
如果是,getting that value is easy:
0
请注意,即使HEAD /
为/
字节,JSFiddle的服务器也会在16916
时返回HEAD
。
还要注意jQuery的docs say关于HTTP请求类型选项的内容:
要求的类型(“POST”或“GET”),默认为“GET”。注意:此处也可以使用其他HTTP请求方法,例如PUT和DELETE,但并非所有浏览器都支持它们。
我刚刚在IE 6-10,Firefox 3.6-7,Opera 9-11和Chrome中测试了这个小提琴,并且每个浏览器都正确发出了{{1}}请求,所以我不担心这个含糊不清不相容的声明。更值得关注的是您的服务器如何响应。
答案 1 :(得分:2)
Javascript无法访问文件系统(谢天谢地),所以我不敢。
答案 2 :(得分:0)
josh3736给出的想法很棒。只有他给出的代码示例拒绝在我的浏览器(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 + '"')}
});
我还要注意,Apache板载XAMPP服务器可以正常处理HEAD
请求,当然,当在localhost上运行时,浏览器会阻止此类请求,并显示错误消息:“origin localhost “Access-Control-Allow-Origin”不允许这样做(例如来自Chrome)。
答案 3 :(得分:-2)
IE: 如果您将“文档模式”设置为“标准”,则可以使用简单的javascript“大小”方法来获取上传文件的大小。
将即“文档模式”设置为“标准”:
<meta http-equiv="X-UA-Compatible" content="IE=Edge">
然后,使用'size'javascript方法获取上传文件的大小:
<script type="text/javascript">
var uploadedFile = document.getElementById('imageUpload');
var fileSize = uploadedFile.files[0].size;
alert(fileSize);
</script>
其他浏览器: 在所有其他浏览器上,您可以使用javascript'size'方法,没有任何问题。