说三道四技术文摘-感悟人生的经典句子
说三道四 > 文档快照

base64上传到后台,图片解码后不完整了,模糊不清.

编辑:说三道四文库 发布时间:2018-05-22 04:03
HTML文档下载 WORD文档下载 PDF文档下载
base64解码后图片不完整 //前台
$(function(){
            document.getElementById('userImg').onchange = function(evt) {  
            // 如果浏览器不支持FileReader,则不处理  
            if (!window.FileReader) return;  
            var files = evt.target.files;
            for (var i = 0, f; f = files[i]; i++) {  
                if (!f.type.match('image.*')) {  
                    continue;  
               }  
                var reader = new FileReader();
                reader.onload = (function(theFile){  
                    return function(e) {
                     var local=window.localStorage;
var uid=local.getItem("uid");
                     var result=e.target.result.split(",");
                     $.ajax({
url:projectName+"/webservice.action",
type : 'POST',
dataType: "json",
data:"json={\"cmd\":\"changeUserIcon\",\"uid\":\""+uid+"\",\"userIcon\":\""+result[1]+"\"}",
cache: !0,
success: function(a) {
      if(a.result==0){
     qikoo.dialog.alert("头像修改成功");
     setTimeout(function(){
     //window.location.reload();
     $("#userIcon").attr("src",a.userIcon);
     //$("#userIcon").attr("src",e.target.result);
     },500)
     }else {
     qikoo.dialog.alert(a.resultNote);
     }
    },
    error: function(a){
     qikoo.dialog.alert("对不起,修改失败!");
    }
});                      
                    };  
                })(f);
                reader.readAsDataURL(f);
            }  
        }  
    });
后台:
 //base64字符串转化成图片   
              // imgStr 和 path 在action层传入,就不写代码了.
    public static String GenerateImage(String imgStr,String path){   //对字节数组字符串进行Base64解码并生成图片  
        if (imgStr == null) //图像数据为空  
            return "";  
        BASE64Decoder decoder = new BASE64Decoder();  
        try   
        {  
            //Base64解码  
            byte[] b = decoder.decodeBuffer(imgStr);  
            for(int i=0;i<b.length;++i){  
                if(b[i]<0){//调整异常数据  
                    b[i]+=256;  
                }  
            }  
            //生成jpeg图片  
            String imgName=DateTimeUtil.dateFormat("yyyyMMddHHmmss", new Date())+StringUtils.randomString(4)+".jpg";
            String imgFilePath = path+imgName;//新生成的图片  
            OutputStream out = new FileOutputStream(imgFilePath);      
            out.write(b);  
            out.flush();  
            out.close();  
            return imgName;  
        }  catch (Exception e) {  
            return "";  
        }  
    }  


注:这个上传是在 项目外的一个 html文件包中的html跨域上传到项目中的. 
其他项目在项目下的html上传就没有问题,但是这个跨域就有问题.很蛋疼,几天了,解决不了.
主要我这个接口的框架很操蛋,
后台用这种方式接收参数 :  String reqJson = Struts2Utils.getParameter("json");
然后判断执行不同的方法,
if (obj.getString("cmd").equals("changeUserIcon")) {         //1.7  用户头像修改
parms = obj.toString();
EditUserIconReq req = JSONObject.parseObject(parms,EditUserIconReq.class);
res = codec(req);
}
所以json中无法直接放入file类型数据,只能用base64编码图片形成,64编码串传过来,然后后台解码.
求大神给讲讲为何  后台 图片解码后 照片不完整.
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘