2015-06-20 62 views
10

我试过这段代码,但它不工作。针对上述问题的任何建议或任何解决方案,用于在xml标记中发送base64字符串。 我使用这个xml标签(即xml解析)搜索了大量关于传递给java服务器的base64字符串,但没有得到任何结果。在xml标记中传递base64图像字符串

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

各地的4/3倍的内存到底是不是有什么加工?更加详细一些。有没有错误?你编码base64字符串中的所有特殊字符吗?来自http://www.xml.com/pub/a/98/07/binary/binary.html:“在Base64中编码的任意比特流可以在XML文档中被指定为元素的内容,只要任何特殊的字符(如“<”)表示为实体(“<”)。读取文档的应用程序需要查找包含二进制数据的元素,并对Base64字符串进行解码以恢复原始二进制流。 –

回答

5

你的代码中包含相当一些错误。我注释其中一些:

  • fileSelectedForLogoalert($('#LogoImageKey').val()):在这里,你是在试图访问$('#LogoImageKey').val()之前,它实际上是设置。实际上这个属性在oReader.onload回调在fileSelectedForLogooReader.readAsDataURL(oFile)
  • document.getElementById('preview')后只调用设置:你正在寻找一个没有被定义(至少在你的HTML代码段)的元素
  • $('#Name').val()又是一个元素没有定义(至少在你的HTML片段)

这是工作代码。我冒昧地添加一个缺失的元素以及一个div来包含图像的base64表示(并删除了一些警报)。我保留了你的基本结构(尽管它可以使一些严重的重构受益),以便你更好地理解改变了什么。

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的getElementById和jQuery选择器(例如$("#foo")
  • 再次为了一致性,选择一个命名约定并坚持使用它。例如,使用元素ID选择骆驼的情况下,下划线分隔的字符串或破折号分隔的字符串,但避免混合它们
  • 避免使用警报调试您的JavaScript代码。而是使用交互式JavaScript开发控制台,几乎所有的浏览器现在提供有记录调试信息(例如console.log(xml)
  • 请记住,一个base64图像所占比原来
+1

虽然base64的尺寸增加只是4/3而不是4倍。 –