java - 如何通过浏览器下载可执行jar?
问题描述
我无法打开下载的可执行 jar。我有一个网络应用程序,用于通过浏览器将 jar 下载到客户端。该文件通过就好了,但我得到了消息:
Error: Invalid or corrupt jarfile
我也无法用 7zip 打开文件。那里发生了什么事?
该应用程序是一个 JavaFx 应用程序,可以在本地完美运行,但是通过 serlvet/浏览器传输时会损坏。
由于非常高的策略设置和导致的类加载问题,我也无法让 webstart 工作。
我的休息端点:
@RequestMapping(value = "/fetchTool", method = RequestMethod.GET)
@ResponseBody
public void downloadTool(HttpServletResponse response) throws IOException {
URL[] urls = ((URLClassLoader)(Thread.currentThread().getContextClassLoader())).getURLs();
Optional<URL> appPath = Arrays.stream(urls).filter(x->x.getPath().contains("myTool")).findFirst();
if (appPath.isPresent()){
String[] fileParts = appPath.get().getPath().split("/");
response.addHeader(CONTENT, ATTACHMENT + fileParts[fileParts.length - 1]);
response.setContentType("application/java-archive");
try (final InputStream input = new FileInputStream(appPath.get().getFile());
final OutputStream output = response.getOutputStream()) {
IOUtils.copy(input, output);
} catch (IOException e) {
throw new NotFoundException("File Not Found " + appPath.get().getPath(), e);
}
}else{
throw new NotFoundException("MyTool Not Found on classpath");
}
}
解决方案
错误出现在 Angularjs 方面,我没有将 responseType 设置为 arrayBuffer。
毕竟不在Java方面。
应该 :
method: 'GET',
transformResponse: fileTransformer,
dataType:"binary",
processData : false,
responseType : 'arraybuffer',
headers: {
"Content-Type":undefined,
"accept": 'application/octet-stream'
}
推荐阅读
- python - 在 Python 中将十六进制颜色代码转换为颜色名称
- python - 如何将 DatetimeIndex 转换为 python 中的字符串?
- taleo-connect-client - Taleo Connect 客户端查询
- regex - 如何排除具有字母字符的组/或捕获仅具有数字字符的行?
- excel - 查找非空白单元格区域是否包含相同的值或多个值
- excel - VBA 向 ListBox 添加更多列
- flutter - 颤振调整 circle_wave 小部件
- python - Panda 遍历 CSV 匹配索引越界
- java - 如何使用 IAIK PKCS11 库在 HSM 中生成密钥
- reactjs - NPM 包中的无效 React Hook