这几天修改niusop,遇到niushop APP端头像无法上传问题,以下是解决方案;
niushop版本 4.1.12
后台修改:
1. /app/api/controller/Member.php中
modifyheadimg()方法 修改成:
/**
* 修改会员头像
* @return string
*/
public function modifyheadimg()
{
$token = $this->checkToken();
if ($token['code'] < 0) return $this->response($token);
$headimg = isset($this->params['headimg']) ? $this->params['headimg'] : '';
// var_dump($headimg);die;
$member_model = new MemberModel();
// $res = $member_model->editMember(['headimg' => $headimg], [['member_id', '=', $token['data']['member_id'], ['site_id', '=', $this->site_id]]]);
$res = $member_model->editimg( $headimg , $token['data']['member_id']);
return $this->response($res);
}
模型路径:app/model/member/Member.php中? 记得要清除一下缓存,不然需要重新登录,改头像才能生效
新增方法:
//修改头像新增代码
public function editimg($img, $member_id)
{
$res= Db::name('member')
->where('member_id', $member_id)
->update(['headimg' => $img]);
Cache::clear(); //清除缓存
if (is_dir('runtime/schema')) { //清除缓存
rmdirs("schema");
}
return $this->success($res);
}
//修改头像新增代码结束
前端修改思路:
H5的环境下,图片路径直接变Base64编码了,直接拿着可以用,但是在APP端 不会直接变Base64编码,需要转换一下,不然不会上传成功。
具体如下:
路径:@/components/img-cropping/cropping.vue
修改内容400行左右:
(上部分是指,如果在H5环境下 怎么怎么样,下边是非H5环境下怎么怎么样,)
// #ifndef MP-ALIPAY
uni.canvasToTempFilePath(
{
x: x,
y: y,
width: width,
height: height,
destWidth: expWidth,
destHeight: expHeight,
canvasId: 'avatar-canvas',
fileType: this.fType,
quality: this.qlty,
success: r => {
console.log(",,,1111111111,,,,",JSON.stringify(r));
r = r.tempFilePath;
// #ifdef H5
this.btop(r).then(r => {
console.log(",,,2222222,,,,",this.base64);
this.$emit('upload', {
avatar: this.imgSrc,
path: r,
index: this.indx,
data: this.rtn,
base64: this.base64 || null
});
return;
});
// #endif
// #ifndef H5
const savedFilePath = r
const path = plus.io.convertLocalFileSystemURL(savedFilePath) //绝对路径
const fileReader = new plus.io.FileReader()
fileReader.readAsDataURL(path)
fileReader.onloadend = (res) => { //读取文件成功完成的回调函数
//console.log(".................",res.target.result) //输出base64内容
this.$emit('upload', {
avatar: this.imgSrc,
path: res.target.result,
index: this.indx,
data: this.rtn,
base64: res.target.result || null
});
}
// #endif
},
|