2015-06-20 5 views
10

Я пробовал этот код, но он не работает. Любые предложения или любые решения для вышеизложенного для отправки строки base64 в тег xml. Я искал много о строке base64, проходящей на java-сервер, используя эти теги xml (например, xml-синтаксический анализ), но не получал никаких результатов.Прохождение base64 image string в теге xml

function fileSelectedForLogo() { 
 
    var oFile = document.getElementById('image_file').files[0]; 
 
\t if(oFile.size/1024 <= 50){ 
 
    var oImage = document.getElementById('preview'); 
 
    var oReader = new FileReader(); 
 
\t oReader.onload = function(e){ 
 
     oImage.src = e.target.result; 
 
\t \t var resultStr = oImage.src; 
 
\t \t var result = resultStr.split(","); 
 
\t \t $('#LogoImageKey').val(result[1]); \t \t 
 
\t \t }; 
 
\t \t alert($('#LogoImageKey').val()) 
 
    oReader.readAsDataURL(oFile); \t 
 
\t }else{ 
 
\t \t alert(" Please Upload Less 50 KB ") 
 
\t } \t 
 
    } 
 

 
function creatingXMLRequest(){ 
 
     var Name = \t $('#Name').val(); 
 
     var logoImage \t \t = $('#LogoImageKey').val(); 
 
     alert(logoImage); 
 
     var xml="<Request>" + 
 
       "<Data>" + 
 
       ifValueInsert(Name,"CName")+ 
 
       ifValueInsert(logoImage,"LogoImage")+ 
 
       "</Data>" + 
 
\t \t \t "</Request>"; 
 
    } 
 

 
function ifValueInsert(value , tagName) 
 
    { 
 
\t alert(value+" == "+tagName) 
 
\t if(value!=undefined && value!='' && value!=null) 
 
\t { 
 
\t \t return "<"+tagName+">"+value+"</"+tagName+">"; 
 
\t } 
 
\t return ""; 
 
    }
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> 
 
<body> 
 
<input type="hidden" id="LogoImageKey" value="" /> 
 
    <label id="lblupload">Image Upload:</label> 
 
    <input id="image_file" type="file" onChange="fileSelectedForLogo();" /> 
 
<input type="button" onClick="creatingXMLRequest();" value="Submit" /> 
 
    </body>

+0

Что именно не является за работой? Более конкретно. Есть ли ошибки? Вы кодировали все специальные символы в строке base64? Из http://www.xml.com/pub/a/98/07/binary/binary.html: «Произвольный бит-поток, закодированный в Base64, может быть указан в XML-документе как содержимое элемента, так как любое специальное символы, такие как «<», представлены как сущности («<»). Приложению, читающему документ, нужно будет искать элемент, содержащий двоичные данные, и декодировать строку Base64 для восстановления исходного двоичного потока ». –

ответ

5

Ваш код содержит довольно некоторые ошибки. Я аннотированный некоторые из них:

  • alert($('#LogoImageKey').val()) в fileSelectedForLogo: здесь вы пытаетесь получить доступ к $('#LogoImageKey').val(), прежде чем он был на самом деле множество. На самом деле этот атрибут установлен в oReader.onload обратного вызова, который только называется после oReader.readAsDataURL(oFile)
  • document.getElementById('preview') в fileSelectedForLogo: вы ищете элемент, который не определен (по крайней мере, в вашем HTML сниппет)
  • $('#Name').val() снова элемент, который не определено (по крайней мере, в вашем html-фрагменте)

Вот рабочий код. Я взял на себя смелость добавить отсутствующие элементы, а также div, чтобы содержать базовое представление изображения (и удалил пару предупреждений). Я сохранил вам базовую структуру (хотя это может принести пользу серьезному рефакторингу), чтобы вы лучше поняли, что изменилось.

function fileSelectedForLogo() { 
 
    var oFile = document.getElementById('image_file').files[0]; 
 
    if(oFile.size/1024 <= 50){ 
 
    var oReader = new FileReader(); 
 
    oReader.onload = function(e){ 
 
     var resultStr = e.target.result; 
 
     var result = resultStr.split(","); 
 
     $('#preview').attr("src", e.target.result); 
 
     $('#LogoImageKey').val(result[1]); 
 
     $('#base64').text(result[1]); 
 
    }; 
 
    oReader.readAsDataURL(oFile); \t 
 
    } else { 
 
    alert(" Please Upload Less 50 KB ") 
 
    } \t 
 
} 
 

 
function encodeXML(str) { 
 
    return str.replace(/&/g, '&amp;') 
 
    .replace(/</g, '&lt;') 
 
    .replace(/>/g, '&gt;') 
 
    .replace(/"/g, '&quot;') 
 
    .replace(/'/g, '&apos;'); 
 
} 
 

 
function creatingXMLRequest(){ 
 
    var Name = $('#Name').val(); 
 
    var logoImage = $('#LogoImageKey').val(); 
 

 
    var xml="<Request>" + 
 
    "<Data>" + 
 
    ifValueInsert(Name,"CName")+ 
 
    ifValueInsert(logoImage,"LogoImage")+ 
 
    "</Data>" + 
 
    "</Request>"; 
 
    console.log(xml); 
 
} 
 

 
function ifValueInsert(value , tagName) { 
 
    //alert(value+" == "+tagName) 
 
    console.log(value+" == "+tagName); 
 
    if(value!=undefined && value!='' && value!=null) { 
 
    return "<"+tagName+">"+encodeXML(value)+"</"+tagName+">"; 
 
    } 
 
    return ""; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> 
 
<body> 
 
    <input type="hidden" id="LogoImageKey" value="" /> 
 
    <label id="name-upload">Logo Name:</label> 
 
    <input id="Name" type="text" value="" /> 
 
    <label id="lblupload">Image Upload:</label> 
 
    <input id="image_file" type="file" onChange="fileSelectedForLogo();" /> 
 
    <input type="button" onClick="creatingXMLRequest();" value="Submit" /> 
 
    <img id="preview" src="" /> 
 
    <div id="base64" /> 
 
</body>

Некоторые общие замечания:

  • Перед добавлением данных в XML, вы должны экранировать специальные символы <, >, ", & (это то, что функционирует encodeXML делает)
  • По причинам непротиворечивости избежать смешивание javascript's getElementById и селекторов jQuery (например, $("#foo"))
  • Снова для согласованности выберите соглашение об именах и придерживайтесь его. Например, с помощью элементов ids выбирают либо верблюжие, либо строки, разделенные символом подчеркивания, либо разделенные штрихами, но избегайте их смешивания.
  • Избегайте отладки кода javascript с помощью предупреждений. Вместо использования интерактивной консоли JavaScript развития, что почти любой браузер в настоящее время предлагает и журнал отладки там (например, console.log(xml))
  • Помните, что base64 изображение занимает около 4/3 раза больше памяти, чем оригинальный
+1

Увеличение размера для base64 составляет всего 4/3, а не 4 раза. –