$(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编码串传过来,然后后台解码.
求大神给讲讲为何 后台 图片解码后 照片不完整.
1 个解决方案
#1
楼主,您好,我是用canvas生产一个图片,然后提交到服务器保存的虽然保存成功了却依然还是看不清楚
#1
楼主,您好,我是用canvas生产一个图片,然后提交到服务器保存的虽然保存成功了却依然还是看不清楚