Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jsp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从Javascript读取JAR的清单文件内容_Javascript_File_Jar - Fatal编程技术网

从Javascript读取JAR的清单文件内容

从Javascript读取JAR的清单文件内容,javascript,file,jar,Javascript,File,Jar,是否可以从Javascript读取清单文件内容。要求上传jar文件,读取清单文件内容,然后在浏览器(客户端)中根据清单文件显示不同的字段,然后将数据发送到服务器。下面是一个基本示例,在chrome中测试。 我从未见过JAR清单,但下面的简单代码处理了我发现的浮动的演示JAR文件 这一部分并不复杂,撕开拉链并抓取文件是,这里有一种方法: <html> <form><input type=file></form> <script src="htt

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

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

这一部分并不复杂,撕开拉链并抓取文件是,这里有一种方法:

<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>

函数getManifest(e){
var file=e.target.files[0];
var reader=new FileReader();
reader.onload=函数(e){
var zip=newjszip(e.target.result);
var manifest=zip.files['META-INF/manifest.MF']
.数据
.trim()
.split(/\s*\n+\s*/)
.地图(功能(a、r){
r=a.split(/\s*:\s*/);
这个[r[0]]=r[1];
归还这个;
},{})[0];
警报(JSON.stringify(manifest,null,“\t”);
};
reader.readAsArrayBuffer(文件);
}
document.forms[0]。元素[0]。onchange=getManifest;
当然,您可能希望将文件输入换成二进制ajax调用,但不可能像文件输入所允许的那样在一段代码中演示这种交互


这很容易,多亏了jszip。关于这一点:有关一般信息和二进制ajax演示,请参阅。

假设您谈论Java server应用程序:

不可能

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

然后通过
XmlHttpRequest
阅读它


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

为什么需要用JavaScript阅读它?@Dave:我们实际上向服务器打了两个电话。。一种是查看jar文件,然后在此基础上在UI中显示几个字段以供更多用户输入,然后再次发送jar文件。。如果我可以用javascript本身读取清单文件,那么就可以避免第一次调用服务器,而不是发送两次jar文件。是的,jar只是一个zip文件。是的,但是关于只用javascript读取清单文件的内容(例如:版本)有什么想法或示例代码吗?我不明白为什么需要发送两次文件。