使用 Java 从 URL 下载 EXE 文件时出现兼容性错误
Downloading EXE file from URL with Java giving me compatibility error
我正在尝试从我的网站下载 EXE 文件。例如,我访问了 rarlab 的网站,并下载了他们的 64 位 WinRAR 版本的全新安装(我们都知道那是什么。)
无论如何,我将 64 位 "setup" exe 文件上传到我网站的根文件夹中,可以轻松下载它(用于测试目的。)通过任何浏览器访问我的网站我都可以成功下载来自 rarlabs 的 "setup" 文件并像执行任何其他 EXE 文件一样执行它。
现在,看在上帝的份上,这是我无法理解的令人困惑的部分。使用这个简单的代码,我从其他一些 Stack Overflow 答案中提取出来,我可以从给定的 URL.
下载任何 EXE 文件
代码...
public static void downloadEXE(URL url, String file) throws IOException {
InputStream in = url.openStream();
FileOutputStream fos = new FileOutputStream(new File(file));
int length = -1;
byte[] buffer = new byte[1024];// buffer for portion of data from
// connection
while ((length = in.read(buffer)) > -1) {
fos.write(buffer, 0, length);
}
fos.close();
in.close();
}
其中 URL 和 FILE 参数是...
URL url = new URL("http://www.website.com/winrar-x64-540.exe");
String file = "c:\Users\..\Documents\winrar-x64-540.exe";
是的,这会将文件从我的站点下载到我的文档文件夹中,没有任何错误,但是当我 运行 它时,我得到了这个错误...
不止于此,我决定尝试使用完全相同的代码从官方网站 rarlabs 下载相同的 64 位 EXE "setup" 文件 EXCEPT .相信我吧我用的是正确的URL,因为这次我不仅用这个代码下载了EXE文件,而且还能够成功运行啦!
让我怀疑我的网站有问题,而不是 EXE 文件?我还应该提到一个非常 IMPORTANT 的发现,我发现它很可能会有所帮助。我决定将 WORKING EXE 文件的属性与 BROKEN 患病文件进行比较。工作的大小为 2.07 MB,而损坏的大小高达 375 字节!损坏的 exe 与工作 exe 的属性不匹配完全。
看到两个文件的比较后,我认为我的网站没有问题,因为我可以通过任何浏览器成功下载和启动我的文件,但代码出错。
请问我任何你需要弄清楚问题的问题。让我知道我需要具体说明的地方。谢谢大家。 :)
您可能没有下载任何有用的东西,也许服务器只是拒绝了您的请求并将其存储为文件?
使用java代码下载的文件大小是多少?和你期待的文件一样吗?
试试用记事本打开看看是不是exe(一些随机的ASCII符号,不是HTML,你就知道区别了)。
如果服务器拒绝您的请求并且 returns HTML,您可能需要在请求中设置一些东西(比如 cookies - 您可能需要登录才能获取,用户- agent 属性, other stuff) 尝试查看从浏览器 运行 firebug 或其他东西完成时的通信情况,激活网络选项卡并查看请求的情况。
我正在尝试从我的网站下载 EXE 文件。例如,我访问了 rarlab 的网站,并下载了他们的 64 位 WinRAR 版本的全新安装(我们都知道那是什么。)
无论如何,我将 64 位 "setup" exe 文件上传到我网站的根文件夹中,可以轻松下载它(用于测试目的。)通过任何浏览器访问我的网站我都可以成功下载来自 rarlabs 的 "setup" 文件并像执行任何其他 EXE 文件一样执行它。
现在,看在上帝的份上,这是我无法理解的令人困惑的部分。使用这个简单的代码,我从其他一些 Stack Overflow 答案中提取出来,我可以从给定的 URL.
下载任何 EXE 文件代码...
public static void downloadEXE(URL url, String file) throws IOException {
InputStream in = url.openStream();
FileOutputStream fos = new FileOutputStream(new File(file));
int length = -1;
byte[] buffer = new byte[1024];// buffer for portion of data from
// connection
while ((length = in.read(buffer)) > -1) {
fos.write(buffer, 0, length);
}
fos.close();
in.close();
}
其中 URL 和 FILE 参数是...
URL url = new URL("http://www.website.com/winrar-x64-540.exe");
String file = "c:\Users\..\Documents\winrar-x64-540.exe";
是的,这会将文件从我的站点下载到我的文档文件夹中,没有任何错误,但是当我 运行 它时,我得到了这个错误...
不止于此,我决定尝试使用完全相同的代码从官方网站 rarlabs 下载相同的 64 位 EXE "setup" 文件 EXCEPT .相信我吧我用的是正确的URL,因为这次我不仅用这个代码下载了EXE文件,而且还能够成功运行啦!
让我怀疑我的网站有问题,而不是 EXE 文件?我还应该提到一个非常 IMPORTANT 的发现,我发现它很可能会有所帮助。我决定将 WORKING EXE 文件的属性与 BROKEN 患病文件进行比较。工作的大小为 2.07 MB,而损坏的大小高达 375 字节!损坏的 exe 与工作 exe 的属性不匹配完全。
看到两个文件的比较后,我认为我的网站没有问题,因为我可以通过任何浏览器成功下载和启动我的文件,但代码出错。
请问我任何你需要弄清楚问题的问题。让我知道我需要具体说明的地方。谢谢大家。 :)
您可能没有下载任何有用的东西,也许服务器只是拒绝了您的请求并将其存储为文件?
使用java代码下载的文件大小是多少?和你期待的文件一样吗?
试试用记事本打开看看是不是exe(一些随机的ASCII符号,不是HTML,你就知道区别了)。
如果服务器拒绝您的请求并且 returns HTML,您可能需要在请求中设置一些东西(比如 cookies - 您可能需要登录才能获取,用户- agent 属性, other stuff) 尝试查看从浏览器 运行 firebug 或其他东西完成时的通信情况,激活网络选项卡并查看请求的情况。