发飙的蜗牛
发飙的蜗牛
  • 发布:2015-03-19 17:05
  • 更新:2017-03-13 22:09
  • 阅读:11225

用mui.ajax上传图片成功,但打开图片时提示此文件可能损坏

分类:MUI

图片上传成功,但打开图片时提示此文件可能损坏,客户端及服务端都有做base64处理,代码如下:
客户端 代码----------------------------------
function appendFile(path) {
path = path.replace(/_/, "../");
var img = new Image();
img.src = path;
img.onload = function() {
var that = this;
//生成比例
var w = that.width,
h = that.height,
scale = w / h;
w = 480 || w; //480 你想压缩到多大
h = w / scale;
//生成canvas
var canvas = document.createElement('canvas');
var ctx = canvas.getContext('2d');
$(canvas).attr({
width: w,
height: h
});
ctx.drawImage(that, 0, 0, w, h);
var base64 = canvas.toDataURL('image/jpeg', 1 || 1); //1z 表示图片质量,越低越模糊。
// alert(base64);
files.push({
name: "file" + index,
pic: base64
}); // 把base64数据丢进数组,上传要用。
index++;
var pic = document.getElementById("x");
pic.src = base64; //这里丢到img 的 src 里面就能看到效果了
}
}

function upload() {
if (files.length <= 0) {
plus.nativeUI.alert("没有添加上传文件!");
return;
}
alert(files.length);
f1 = files[0].pic;
var wt = plus.nativeUI.showWaiting();
var url = '你的后台地址';
//预期服务器范围的数据类型
var dataType = 'json';
var postdata = {
'CORP_ID': '10002',
'USER_ID': '10200',
'FILE_NAME': '112233411',
'FILE_ID': '112233411',
'DATA': f1};
//发送数据
mui.ajax('http://xxxxxx/uploadPhoto.shtml', {
data: {
'data': JSON.stringify(postdata)
},
dataType: 'json', //服务器返回json格式数据
type: 'post', //HTTP请求类型
timeout: 30000, //超时时间设置为10秒;
success: function(data) {
wt.close();
//服务器返回响应,根据响应结果,分析是否登录成功;
var MESSAGE = data.MESSAGE;
alert(MESSAGE.MESSAGECONTENT);
},
error: function(xhr, type, errorThrown) {
wt.close();
alert('上传失败')
//异常处理;
console.log(type);
}
});
}

-----------服务端代码
byte[] data = Base64.decodeBase64(base64.getBytes());
StringBuffer dir = new StringBuffer(UploadUtils.PHOTO_FOLDER).append("/")
.append(corpId);
String filename = new StringBuffer().append("/").append(uuid).append(".jpg").toString();

        File filedir = new File(dir.toString());  
        if (!filedir.exists())  
            filedir.mkdirs();  
        try {  
            ServiceFile service = (ServiceFile) ctx.getBean("remoteServiceFile");  
            // 保存文件  
            FileOutputStream out = new FileOutputStream(dir.append(filename).toString());  
            out.write(data);  
            out.flush();  
            // 文件信息入库  
            FilePO filePO = new FilePO();  
            filePO.setFILE_ID(uuid);  
            filePO.setCORP_ID(corpId);  
            filePO.setFILE_NAME(fileName);  
            filePO.setFILE_TYPE(fileType);  
            service.insertFileInfo(filePO);  
        } catch (Exception e) {  
            e.printStackTrace();  
        }
2015-03-19 17:05 1 条评论 负责人:无 分享
已邀请:
DCloud_UNI_FXY

DCloud_UNI_FXY

对比上传前的base64和上传后,后台的base64.

如果一致。考虑是不是图片格式不一致导致的。

发飙的蜗牛

发飙的蜗牛 (作者)

嗯 我调试下,常联系啊

发飙的蜗牛

发飙的蜗牛 (作者)

谢谢了,多了个这玩意,替换掉就欧了。
f1 = f1 .replace(/data:image\/jpeg;base64,/, "")

  • gurongorng

    请问一下具体怎么修改

    2015-05-14 21:48

stock2

stock2

记录下.以后用.

Hosmelegic

Hosmelegic

首先非常感谢你的分享。我尝试了下,一直都是返回:type:parsererror;xhrReadyState:4;errorThrow:SyntaxError: JSON Parse error: Unexpected identifier "Array";xhr.status:200。请问是什么问题呢?

  • DCloud_UNI_FXY

    排查你服务端返回的json数据格式,在网上搜索json格式校验,校验一下。你返回的json格式有问题

    2015-07-29 01:48

9***@qq.com

9***@qq.com

请问base64用的是哪个jar包里的 ?

1***@qq.com

该问题目前已经被锁定, 无法添加新回复