前台html:

 <div class="xz_img2 text-center">
<div class="images_flow" id="img_wrap" <?php if(!$model->head_pic){echo "style='display:none'";}else{echo "style='display:block'";}; ?>>
<img src="<?= StringHelper::isNullOrEmpty($model->head_pic)
?
Url::to('@web/uploads/headpic/default.jpg')
:
Url::to('@web/'.$model->head_pic.'1.jpg'. '?v=' . time())?>" alt="" class="img-circle">
<p style="line-height:50px;"><a href="#" id = 'pic'>上传图片</a></p>
</div>
</div>
<div class="container" id="main">
<div class="demo " <?php if($model->head_pic){echo "style='display:none'";}else{echo "style='display:block'";}; ?>>
<p id="swfContainer">
本组件需要安装Flash Player后才可使用,请从<a
href="http://dl.pconline.com.cn/html_2/1/114/id=8122&pn=0.html"
target="_blank">这里</a>下载安装。
</p>
<button type="button" id="upload" style="display:none;margin-top:8px;"> </button>
</div>

前台js :

  swfobject.addDomLoadEvent(function () {
var swf = new fullAvatarEditor("<?=Url::to('@web/assets/flash_upload/')?>fullAvatarEditor.swf", "<?=Url::to('@web/assets/flash_upload/')?>xpressInstall.swf", "swfContainer", {
id: 'swf',
upload_url: '<?=Url::to('upload-pic')?>?userid=<?=$model->id?>&username=<?=$model->name?>&_csrf=<?=Yii::$app->request->getCsrfToken()?>', //上传接口
method: 'post', //传递到上传接口中的查询参数的提交方式。更改该值时,请注意更改上传接口中的查询参数的接收方式
src_upload: 0, //是否上传原图片的选项,有以下值:0-不上传;1-上传;2-显示复选框由用户选择
avatar_box_border_width: 0,
avatar_sizes: '100*100|50*50|30*30',
avatar_sizes_desc: '100*100像素|50*50像素|30*30像素',
tab_visible:true,
browse_button_y:-30,
tab_font_size: 20,
}, function (msg) {
switch (msg.code) {
case 1 :
// alert("页面成功加载了组件!");
break;
case 2 :
//
document.getElementById("upload").style.display = "inline";
break;
case 3 :
if (msg.type == 0) {
alert("摄像头已准备就绪且用户已允许使用。");
}
else if (msg.type == 1) {
alert("摄像头已准备就绪但用户未允许使用!");
}
else {
alert("摄像头被占用!");
}
break;
case 5 :
if (msg.type == 0) {
if (msg.content.sourceUrl) { alert("原图已成功保存至服务器,url为:\n" +  msg.content.sourceUrl + "\n\n" + "头像已成功保存至服务器,url为:\n" + msg.content.avatarUrls.join("\n\n") + "\n\n传递的userid=" + msg.content.userid + "&username=" + msg.content.username);
}
else {
var user_id = msg.content.userid;
var user_name = msg.content.username;
var url = '/hr/user-info/deal-image'+'?v='+ new Date().getTime();
$.ajax({
url:url,
type:'post',
dataType:'json',
data:{user_id: user_id},
success:function(data){
if(data.success){
$('.demo').hide();
$("#img_wrap").show();
$("#img_wrap img").attr('src','/'+data.url+'1.jpg'+'?v='+ new Date().getTime()); //window.location.reload();
}
}
});
//alert("头像已成功保存至服务器,url为:\n" + msg.content.avatarUrls.join("\n\n") + "\n\n传递的userid=" + msg.content.userid + "&username=" + msg.content.username);
}
}
break;
}
}
);
document.getElementById("upload").onclick = function () {
swf.call("upload");
};
});

后台php:

  /**
* 上传图片
*/
public function actionUploadPic()
{
$result = array();
$result['success'] = false;
$success_num = 0;
$msg = '';
//上传目录
$dir = "uploads/headpic";
//$path = 'uploads/headpic/';
// 取服务器时间+8位随机码作为部分文件名,确保文件名无重复。
$filename = date("YmdHis") . '_' . floor(microtime() * 1000) . '_' . mt_rand(100,999);
// 处理原始图片开始------------------------------------------------------------------------>
//默认的 file 域名称是__source,可在插件配置参数中自定义。参数名:src_field_name
$source_pic = isset($_FILES["__source"]) ? $_FILES["__source"] : '';
//如果在插件中定义可以上传原始图片的话,可在此处理,否则可以忽略。
if ($source_pic) {
if ($source_pic['error'] > 0) {
$msg .= $source_pic['error'];
} else {
//原始图片的文件名,如果是本地或网络图片为原始文件名、如果是摄像头拍照则为 *FromWebcam.jpg
$sourceFileName = $source_pic["name"];
//原始文件的扩展名(不包含“.”)
$sourceExtendName = substr($sourceFileName, strripos($sourceFileName, "."));
//保存路径
$savePath = "$dir/php_source_$filename." . $sourceExtendName;
//当前头像基于原图的初始化参数(只有上传原图时才会发送该数据,且发送的方式为POST),用于修改头像时保证界面的视图跟保存头像时一致,提升用户体验度。
//修改头像时设置默认加载的原图url为当前原图url+该参数即可,可直接附加到原图url中储存,不影响图片呈现。
$init_params = $_POST["__initParams"];
$result['sourceUrl'] = $savePath . $init_params;
move_uploaded_file($source_pic["tmp_name"], $savePath);
$success_num++;
}
}
//<------------------------------------------------------------------------处理原始图片结束
// 处理头像图片开始------------------------------------------------------------------------>
//头像图片(file 域的名称:__avatar1,2,3...)。
$avatars = array("__avatar1", "__avatar2", "__avatar3");
$avatars_length = count($avatars);
$userId = $_POST["userid"]; for ($i = 0; $i < $avatars_length; $i++) {
$avatar = $_FILES[$avatars[$i]];
$avatar_number = $i + 1;
if ($avatar['error'] > 0) {
$msg .= $avatar['error'];
} else {
$path = 'uploads/headpic/' . $userId;
if(!file_exists($path)){
mkdir($path, 0777);
chmod($path, 0777);
}
$savePath = "$path/".'face'.$_POST["userid"].'_'. $avatar_number.".jpg";
$result['avatarUrls'][$i] = $savePath;
move_uploaded_file($avatar["tmp_name"], $savePath);
$success_num++;
}
}
//<------------------------------------------------------------------------处理头像图片结束
//upload_url中传递的额外的参数,如果定义的method为get请换为$_GET
$result["userid"] = $_POST["userid"];
$result["username"] = $_POST["username"]; $result['msg'] = $msg;
if ($success_num > 0) {
$result['success'] = true;
}
//返回图片的保存结果(返回内容为json字符串)
print json_encode($result);
}

注意问题:

 upload_url: '<?=Url::to('upload-pic')?>?userid=<?=$model->id?>&username=<?=$model->name?>&_csrf=<?=Yii::$app->request->getCsrfToken()?>', //上传接口
中的参数 加上_csrf = <?=Yii::$app->request->getCsrfToken()?>

Yii2 富头像上传的更多相关文章

  1. Yii2.0 集成使用富头像上传编辑器

    在开发过程中,我们会用到头像上传的功能.这里给大家推荐一款比较流行的头像上传组件,FullAvatarEditor 2.3(富头像上传编辑器). 实际效果如图所示: 1.下载组件,下载地址:http: ...

  2. js实现裁剪头像上传编辑器

    插件: 1.富头像上传编辑器是一款支持本地上传.预览.视频拍照和网络加载的flash头像编辑上传插件,可缩放.裁剪.旋转.定位和调色等. http://www.fullavatareditor.com ...

  3. 强大的flash头像上传插件(支持旋转、拖拽、剪裁、生成缩略图等)

    今天介绍的这款flash上传头像功能非常强大,支持php,asp,jsp,asp.net 调用 头像剪裁,预览组件插件. 本组件需要安装Flash Player后才可使用,请从http://dl.pc ...

  4. 【Bootstrap-插件使用】Jcrop+fileinput组合实现头像上传功能

    作者:Dreawer链接:https://zhuanlan.zhihu.com/p/24465742来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. 作者:梦游的龙猫(转 ...

  5. [Bootstrap-插件使用]Jcrop+fileinput组合实现头像上传功能

    很久没有更新博客了,再不写点东西都烂了. 这次更新一个小内容,是两个插件的组合使用,实现头像上传功能. 业务需求: 头像上传功能,要对上传的文件进行剪切,且保证头像到服务器时必须是正方形的. 优化&l ...

  6. struts 头像上传

    java代码: 1 package cn.itcast.nsfw.user.action; import java.io.File; import java.io.IOException; impor ...

  7. js会员头像上传拖动处理头像类

    js会员头像上传拖动处理头像类 点击下载源码文件

  8. 【javascript】html5中使用canvas编写头像上传截取功能

    [javascript]html5中使用canvas编写头像上传截取功能 本人对canvas很是喜欢,于是想仿照新浪微博头像上传功能(前端使用canvas) 本程序目前在谷歌浏览器和火狐浏览器测试可用 ...

  9. Canvas处理头像上传

    未分类 最近社区系统需要支持移动端,其中涉及到用户头像上传,头像有大中小三种尺寸,在PC端,社区用Flash来处理头像编辑和生成,但该Flash控件的界面不友好而且移动端对Flash的支持不好,考虑到 ...

随机推荐

  1. 转 scrollLeft,scrollWidth,clientWidth,offsetWidth之完全详解

    scrollHeight: 获取对象的滚动高度. scrollLeft:设置或获取位于对象左边界和窗口中目前可见内容的最左端之间的距离 scrollTop:设置或获取位于对象最顶端和窗口中可见内容的最 ...

  2. mysql function 与 procedure

    Mysql 的 function 和 procedure 有啥区别呢 ? 网上搜索后说 function 有返回值, procedure 无返回值. 1.return  从function 的语法角度 ...

  3. css3360度旋转动画

    @-webkit-keyframes Parallaxs{ from { -webkit-transform: rotate(180deg) ; -moz-transform: rotate(180d ...

  4. PHP漏洞全解(六)-跨网站请求伪造

    本文主要介绍针对PHP网站的跨网站请求伪造.在CSRF所有攻击方式中包含攻击者伪造一个看起来是其他用户发起的HTTP 请求,事实上,跟踪一个用户发送的HTTP请求才是攻击者的目的. CSRF(Cros ...

  5. 详解浏览器缓存机制与Apache设置缓存

    一.详解浏览器缓存机制 对于,如何说明缓存机制,在网络上找到了两张图,个人认为思路是比较清晰的.总结时,上图. 这里需要注意的有两点: 1.Last-Modified.Etag是响应头里的数据 2.I ...

  6. Altium Designer学习:PCB只看当前层

    1 Shift+S          这个快捷键能高亮当前层,并且使其他层变成灰色,见下图:       2 隐藏指定层 在图中右下角的地方,右键,会弹出一个选项条,选择Hide Layers,可以选 ...

  7. Android USB Host 与 Hid 设备通信bulkTransfer()返回-1问题的原因

    近期一直在做Android USB Host 与USB Hid设备(STM32FXXX)的通信,遇到了很多问题.项目源码以及所遇到的其他问题可以见本博客其他相关文章,这里重点讲一下bulkTransf ...

  8. objective-c 强大的布尔类型

    objective-c codes: #import <Foundation/Foundation.h> BOOL areIntsDifferent(int thing1,int thin ...

  9. 【HDOJ】1253 胜利大逃亡

    经典的BFS,需要注意的是当前时间超过最小时间,输出-1.同时,队列为空时还未返回,证明并未找到终点(可能终点为墙).此时也应该输出-1,这个部分容易wa. #include <cstdio&g ...

  10. 在Sublime Text 3中配置编译和运行C++程序

    下载解压MinGW至目标目录,本次安装的解压目录为C:\MinGW 设置环境变量.右击我的电脑,属性-->高级-->环境变量. 在系统环境变量PATH里添加C:\MinGW\bin(如果里 ...