2013-06-18 6 views
1

Возможно ли прочитать содержимое файла манифеста из Javascript. Требование - загрузить файл jar, прочитать содержимое файла манифеста, а затем отобразить различные поля на основе файла манифеста в браузере (на стороне клиента), а затем отправить данные на сервер.Чтение содержимого файла манифеста JAR из Javascript

+0

Зачем нужно читать его на JavaScript? –

+0

@Dave: мы на самом деле делаем 2 звонка на сервер. Один просматривает jar-файл, а затем на основе этого отображения несколько полей в пользовательском интерфейсе для большего ввода пользователем, а затем снова отправляет файл jar .. вместо отправки файлов jar 2 раза , если бы я мог прочитать файл манифеста в самом javascript, тогда можно избежать первого вызова сервера. – Girish

+0

Да, банка - это всего лишь почтовый файл. – dandavis

ответ

0

Вот базовый пример, протестированный в хромированном состоянии. Я никогда не видел манифест 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> 

конечно, вы хотите поменять входной файл для бинарного AJAX звоните, но это невозможно для демонстрации такого взаимодействия в параграфе кода, например, для ввода файла ...

Это довольно просто, благодаря jszip. об этом: см. http://stuk.github.io/jszip/ для общей информации и http://stuk.github.io/jszip/examples/get-binary-files-xhr2.html для двоичной демонстрации ajax.

0

Предположив вы говорите о приложении сервера Java:

Нет это не невозможно.

Необходимо как-либо разоблачить информацию из манифеста, например. через API REST. См. [RestEasy | http: //www.jboss.org/resteasy].

И затем прочитайте его через XmlHttpRequest.

PS: В META-INF или WEB-INF это не очень хорошая идея - это риск для безопасности.

Смежные вопросы