java - 如何通过浏览器下载可执行jar?

标签 java swing servlets java-web-start corrupt

我无法打开下载的可执行 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'
            }

关于java - 如何通过浏览器下载可执行jar?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50913194/

相关文章:

java - 如何从 bash 调用 servlet

java - 为什么 XmlEncoder 不将类的成员插入到 xml 文件中?

Java/JSF/Tomcat/Spring - 代理对象具有与原始对象不同的方法

java - 为什么JPanel尺寸不对?

Java Swing 按钮 Action 事件

java - 如何处理参数值中的特殊字符?

java - 如何处理处理大型 csv 文件或分块读取大型 CSV 文件

java - 将 JScrollPane 添加到 JFrame

java - GridbagLayout - 在 c.fill = BOTH 时获取 ButtonSize

java - servlet : Caused by: java. lang.IllegalArgumentException:无法转换参数:null