codenameone - 无需下载即可获取 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,是否有一种方法可以只下载响应标头,而无需开始下载。谢谢你。
解决方案
使用 HTTP 头请求应该为您提供内容长度头,然后您可以使用它来获取文件的大小,而不会触发下载。您的代码可能不会在下载时完成,但它确实会发生,因此头部请求会更好。
head
不幸的是,虽然in有一个很好的包装器Rest
。这个包装器不是很有用,因为没有 API 来查询响应头。这将是有意义的增强。您需要派生ConnectionRequest
并读取服务器响应标头以获取内容长度。
推荐阅读
- java - 为什么 jacobs “new ActiveXComponent” 在与 Redemption 一起使用时有时会抛出“无法共同创建对象”?
- spring-boot - Spring Data Neo4j MappingException:实体的主 ID 字段为空
- qt - 如何使组合框项目在 qml 中不可选择?
- c# - 计算数组中的元素 - 性能 -
- python - 当每个脚本在 python 中有多个线程时,从主脚本同时运行两个脚本
- javascript - 无法使用谷歌地图标记,并出现 javascript 全局变量问题
- c# - 等待同步的异步方法是否可以接受?
- oracle - Oracle 高级队列与小型 Oracle 数据库表
- c# - 当轴是修复部分图表的范围时,整个图表的光标不可见并且轴标签重叠
- magento2 - 在类别页面上加载更多不适用于波尔图主题 magento 2 的产品