首页 > 解决方案 > 无需下载即可获取 URL 的文件大小

问题描述

为了在不下载的情况下获取 URL 的文件大小,我写道:

public static long getFileSizeWithoutDownload(String url) {
        ConnectionRequest cr = new GZConnectionRequest();
        cr.setUrl(url);
        cr.setPost(false);
        NetworkManager.getInstance().addProgressListener((NetworkEvent evt) -> {
            if (cr == evt.getConnectionRequest() && evt.getLength() > 0) {
                cr.kill();
            }
        });
        NetworkManager.getInstance().addToQueueAndWait(cr);
        return cr.getContentLength();
    }

它似乎可以在模拟器、Android 和 iOS 上使用我的 Spring Boot 服务器的测试 URL。

无论如何,我认为这段代码是一种解决方法,因为我找不到一个直接给我文件大小而不先开始下载的 API。开始下载然后终止它可以工作,但也许有更好的方法来获得相同的结果。顺便说一句,&& evt.getLength() > 0在某些情况下可能永远不会满足条件(取决于接收到的标头),因此最好只读取标头,其中“Content-Length”可能存在或不存在。

所以,我的问题是,如果使用 Codename One,是否有一种方法可以只下载响应标头,而无需开始下载。谢谢你。

标签: codenameone

解决方案


使用 HTTP 头请求应该为您提供内容长度头,然后您可以使用它来获取文件的大小,而不会触发下载。您的代码可能不会在下载时完成,但它确实会发生,因此头部请求会更好。

head不幸的是,虽然in有一个很好的包装器Rest。这个包装器不是很有用,因为没有 API 来查询响应头。这将是有意义的增强。您需要派生ConnectionRequest并读取服务器响应标头以获取内容长度。


推荐阅读