使用jQuery查找下载链接后面文件的大小

28

我想知道是否有一种使用jQuery来查找链接到网页的PDF文件大小的方法。

我想实现鼠标悬停在下载链接上时,一个模态框弹出,显示PDF文件大小。我可以完成第二步,唯一需要知道的是如何查找文件大小。我不知道jQuery是否能够实现这一点。如果不能,那就太糟糕了。

提前致谢。


可能是通过ajax获取请求文件的大小的重复问题。 - user2284570
5个回答

48

我感觉这个操作在客户端做太多了,但是我不知道你的应用程序细节,所以假设你必须使用jQuery,你可以执行一个HEAD请求并查看Content-Length头部。先前我推荐了jqHead插件,但是在我尝试使用它后发现它已经失效了。

这里有一个可行的示例,不需要任何额外的插件:http://host.masto.com/~chris/so/jqhead.html

核心代码非常简单:

  var request;
  request = $.ajax({
    type: "HEAD",
    url: $("#url").val(),
    success: function () {
      alert("Size is " + request.getResponseHeader("Content-Length"));
    }
  });

我本来正在写一个建议使用HEAD请求的答案,但你比我更快。展示一下如何使用/不使用插件的代码可能会有所帮助。 - eyelidlessness
很棒,但开发人员应该注意这里涉及到域名隐私 :) - ValeriiVasin
根据@InviS所说,尝试使用http://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js,它位于另一个域上。 - vol7ron
@vol7ron 无论你的 .js 文件从哪个域加载,它都可以在你的域上运行。如果你的网站域名是 a.com,而你要使用 AJAX 从 b.com 获取数据,你应该在 AJAX 选项中添加 xhrFields: { withCredentials: true } 字段,详见 jQuery.ajax,服务器应该正确响应 Access-Control-Allow-Origin 字段。 - ValeriiVasin
@InviS 这不是跨域。我只是举了一个例子来说明你的说法。我不认为 withCredentials 会在那个 Google CDN 上起作用 :) - vol7ron
1
我刚发现并不是所有的服务器都会发送Content-Length头:( - Luca Reghellin

12

这是一个可行的JavaScript片段,可以在不访问服务器的情况下获取文件的大小,如果你将要上传文件到服务器。这个想法有助于在上传大文件之前限制文件大小。

<input type="file" id="loadfile" />
<input type="button" value="find size" onclick="findSize()" />
<script type="text/javascript">
    function findSize() {
        var fileInput = $("#loadfile")[0];
        alert(fileInput.files[0].size); // Size returned in bytes.
    }    
</script>

@Kyle Sevenoaks:对不起,Kyle。我在折腾它,我回滚到了你的版本 :) - Skurmedel
在Firefox和Safari中工作正常。没有jQuery,所以我猜它失败了。 - RobG
在Firefox中,fileSize已经被废弃,转而使用size。 - Danyal Aytekin
如果我想要检查文件日期怎么办?用什么?谢谢 ^^ - anj

0
如果您事先知道文件大小,可以将其放入下载链接的标题属性中。您也可以使用jQuery显示自定义弹出窗口。
否则,我认为没有办法仅获取URL的文件大小(内容长度)而无需实际下载整个内容。

0
我能想到的唯一方法是创建一个 Web 服务,该服务将返回 PDF 文件的文件大小。

0
在上面的答案中,Chrome 21和Safari 6没有fileSize成员,但有size。请使用:

fileInput.files[0].size


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接