【问题标题】:Reading manifest file contents of a JAR from Javascript从 Javascript 读取 JAR 的清单文件内容
【发布时间】:2013-06-14 02:40:54
【问题描述】:

是否可以从 Javascript 读取清单文件内容。要求是上传一个jar文件,读取manifest文件内容,然后在浏览器(客户端)根据manifest文件显示不同的字段,然后向服务器发送数据。

【问题讨论】:

  • 为什么需要在 JavaScript 中阅读?
  • @Dave:我们实际上是在对服务器进行 2 次调用。一个是查看 jar 文件,然后基于在 UI 中显示几个字段以获得更多用户输入,然后再次发送 jar 文件。而不是发送 jar 文件 2 次,如果我可以在 javascript 本身中读取清单文件,那么可以避免第一次调用服务器。
  • 是的,jar 只是一个 zip 文件。
  • 是的,但是关于仅在 javascript 中读取清单文件内容(例如:版本)的任何想法或示例代码?
  • 我不明白您为什么需要发送两次文件。

标签: javascript file jar


【解决方案1】:

这是一个基本示例,在 chrome 中进行了测试。 我从未见过 JAR 清单,但下面的简单代码适用于我发现浮动的演示 JAR 文件。

无论如何,这部分并不棘手,撕开 zip 并抓取文件,这是一种方法:

<html>
<form><input type=file></form>
<script src="http://stuk.github.io/jszip/jszip.js"></script>
<script src="http://stuk.github.io/jszip/jszip-load.js"></script>
<script src="http://stuk.github.io/jszip/jszip-inflate.js"></script>
<script>

    function getManifest(e){

    var file=e.target.files[0];        
    var reader = new FileReader();

    reader.onload = function(e) {
       var zip = new JSZip(e.target.result);
       var manifest = zip.files['META-INF/MANIFEST.MF']
           .data
           .trim()
           .split(/\s*\n+\s*/)
           .map(function(a,r){
                   r=a.split(/\s*:\s*/); 
                   this[r[0]] = r[1]; 
                   return this;
           },{})[0];

       alert(JSON.stringify(manifest, null, "\t"));

    };

     reader.readAsArrayBuffer(file);
}

document.forms[0].elements[0].onchange=getManifest;

</script>
</html>

当然,您会希望将文件输入换成二进制 ajax 调用,但在一段代码中演示这种交互几乎是不可能的,就像文件输入允许...

这很容易,感谢 jszip。关于这一点:请参阅http://stuk.github.io/jszip/ 了解一般信息和http://stuk.github.io/jszip/examples/get-binary-files-xhr2.html 了解二进制 ajax 演示。

【讨论】:

    【解决方案2】:

    假设您谈论 Java 服务器应用程序:

    不,这是不可能的。

    您需要以某种方式从清单中公开信息,例如通过 REST API。请参阅 [RestEasy|http://www.jboss.org/resteasy]。

    然后通读XmlHttpRequest

    PS:暴露 META-INF 或 WEB-INF 中的任何内容都不是一个好主意 - 这是一个安全风险。

    【讨论】:

      猜你喜欢
      • 2014-05-13
      • 1970-01-01
      • 2013-10-21
      • 1970-01-01
      • 2011-03-20
      • 2011-08-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多