gpt4 book ai didi

JavaFX WebView 下载

转载 作者:行者123 更新时间:2023-12-01 22:29:27 29 4
gpt4 key购买 nike

我正在尝试将下载添加到我的网络浏览器,但遇到的问题是获取您尝试下载的文件的名称。这是我的下载代码:

engine.locationProperty().addListener(new ChangeListener<String>() {
@Override
public void changed(ObservableValue<? extends String> observable, String oldValue, String newValue) {
File file = new File(System.getProperty("user.home") + "/Downloads/Ekko Downloads/");
String[] downloadableExtensions = {".doc", ".xls", ".zip", ".exe", ".rar", ".pdf", ".jar", ".png", ".jpg", ".gif"};
for(String downloadAble : downloadableExtensions) {
if (newValue.endsWith(downloadAble)) {
try {
if(!file.exists()) {
file.mkdir();
}
File download = new File(file + "/" + newValue);
if(download.exists()) {
Dialogs.create().title("Exists").message("What you're trying to download already exists").showInformation();
return;
}
Dialogs.create().title("Downloading").message("Started Downloading").showInformation();
FileUtils.copyURLToFile(new URL(engine.getLocation()), download);
Dialogs.create().title("Download").message("Download is completed your download will be in: " + file.getAbsolutePath()).showInformation();
} catch(Exception e) {
e.printStackTrace();
}
}
}
}
});

问题出在这里:File download = new File(file + "/"+ newValue);

我需要获取该文件的名称,而不是 newValue。

最佳答案

理想情况下,您要做的是拦截网络层的调用,并解释 content disposition MIME messages嵌入到 HTTP 流量中。这些消息可以指示浏览器将文件下载为具有提供的文件名的附件。这就是当您单击浏览器链接时,根据服务器发送的指令自动下载一些文件的方式。

浏览器做的另一件事是实现一种 mime 魔法,它们查看返回消息的 mime 内容类型、对网络流量的深入检查或仅查看 URL 位置的扩展名前缀以调用处理程序进行下载特定的内容类型(您只在代码中执行后面的操作)。

浏览器处理下载的最后一种方式是您可以右键单击页面或链接并选择“另存为”。

因此,如果您想要一个真正强大、功能齐全的浏览器(例如 Chrome 或 Firefox),您可以执行上述所有操作。这样horribly complicated test matrix shows ,对于所有极端情况来说,这并不是一件特别容易的事情,甚至大佬也会出错。

拦截 WebView 的网络流量是可能的,但很困难。您可以研究其他 StackOverflow 问题来做到这一点 - 我不会在这里解决它。

拦截任意网页点击也是如此,再次搜索 StackOverflow,它会出现一些相关问题,这可能允许您右键单击下载功能。

因此,您只需拦截位置属性更改即可 - 显然并不理想,但在许多情况下都是可行的。这意味着您不会获得内容处置 header 中编码的文件名,而是必须解析位置 url(只需获取最后一个/之后的所有内容)并将其设置为文件名。

您可以使用以下问题的答案从位置 URL 派生文件名:

关于JavaFX WebView 下载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28112151/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com