- ubuntu12.04环境下使用kvm ioctl接口实现最简单的虚拟机
- Ubuntu 通过无线网络安装Ubuntu Server启动系统后连接无线网络的方法
- 在Ubuntu上搭建网桥的方法
- ubuntu 虚拟机上网方式及相关配置详解
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.
这篇CFSDN的博客文章php+js iframe实现上传头像界面无跳转由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.
上传头像,界面无跳转的方式很多,我用的是加个iframe那种。下面直接上代码。 html
复制代码 代码如下
//route 为后端接口 //upload/avatar 为上传的头像的保存地址 //imgurl=/upload/avatar/<?=$uid?> 这里最后的<?=$uid?>是为了后面用js实现即时显示最新的更换后的头像用的,参照下面的js部分的代码 //头像保存名称为uid.type,如1.jpg,2.png等 //$user['avatar'] 用户如果上传过头像,该用户数据库中的avatar字段将赋予时间戳,否则为空 <form target="iframe" enctype="multipart/form-data" action="route?imgurl=/upload/avatar/<?=$uid?>" method="post" id="upload_form"> <img class="thumb" src="<?php if($user['avatar']) echo $my_img; else echo '/view/img/100.png'; ?>" style="width:100px; height:100px;" /> <input type="file" name="file" size="28" /> <input type="submit" name="submit_file" value="确定" style="display: none;"/> </form> <iframe id="iframe" name="iframe" style="display: none;"></iframe> 。
php
复制代码 代码如下
$token = param('token'); $user = user_from_token($token); !$user AND exit("<p class='iframe_message' status='0'>$lang[user_not_exists]</p>"); //文件存储路径 $file_path="./upload/avatar/"; //664权限为文件属主和属组用户可读和写,其他用户只读。 if(is_dir($file_path) != TRUE) mkdir($file_path, 0664) ; //定义允许上传的文件扩展名 $ext_arr = array("gif", "jpg", "jpeg", "png", "bmp"); if (empty($_FILES) === false) { //判断检查 $photo_up_size > 2097152 AND exit("<p class='iframe_message' status='0'>对不起,您上传的照片超过了2M</p>"); $_FILES["file"]["error"] > 0 AND exit("<p class='iframe_message' status='0'>文件上传发生错误:".$_FILES["file"]["error"]."</p>"); //获得文件扩展名 $temp_arr = explode(".", $_FILES["file"]["name"]); $file_ext = array_pop($temp_arr); $file_ext = trim($file_ext); $file_ext = strtolower($file_ext); //检查扩展名 if (in_array($file_ext, $ext_arr) === false) { exit("<p class='iframe_message' status='0'>上传文件扩展名是不允许的扩展名</p>"); } //删除目录下相同前缀的文件 if($dh = opendir($file_path)) { while(($file = readdir($dh)) !== false) { $file_arr = $file.split('.'); if($file_arr[0] == $user['uid']) unlink($file_path.$file); } } //以uid重命名文件 $new_name = $user['uid'].".".$file_ext; //将文件移动到存储目录下 move_uploaded_file($_FILES["file"]["tmp_name"], $file_path.$new_name); //裁剪压缩图片 clip($file_path.$new_name, $file_path.$new_name, 0, 0, 100, 100); clip_thumb($file_path.$new_name, $file_path.$new_name, 100, 100); //向数据表写入文件存储信息以便管理 user_update($user['uid'], array('avatar'=>time())); exit("<p class='iframe_message' status='1'>文件上传成功</p>"); } else { exit("<p class='iframe_message' status='0'>无正确的文件上传</p>"); } <?php function ext($filename) { return strtolower(substr(strrchr($filename, '.'), 1)); } /* 实例: thumb(APP_PATH.'xxx.jpg', APP_PATH.'xxx_thumb.jpg', 200, 200); 返回: array('filesize'=>0, 'width'=>0, 'height'=>0) */ function thumb($sourcefile, $destfile, $forcedwidth = 80, $forcedheight = 80) { $return = array('filesize'=>0, 'width'=>0, 'height'=>0); $imgcomp = 10; $destext = ext($destfile); if(!in_array($destext, array('gif', 'jpg', 'bmp', 'png'))) { return $return; } $imgcomp = 100 - $imgcomp; $imginfo = getimagesize($sourcefile); $src_width = $imginfo[0]; $src_height = $imginfo[1]; if($src_width == 0 || $src_height == 0) { return $return; } $src_scale = $src_width / $src_height; $des_scale = $forcedwidth / $forcedheight; if(!function_exists('imagecreatefromjpeg')) { copy($sourcefile, $destfile); $return = array('filesize'=>filesize($destfile), 'width'=>$src_width, 'height'=>$src_height); return $return; } // 按规定比例缩略 if($src_width <= $forcedwidth && $src_height <= $forcedheight) { $des_width = $src_width; $des_height = $src_height; } elseif($src_scale >= $des_scale) { $des_width = ($src_width >= $forcedwidth) ? $forcedwidth : $src_width; $des_height = $des_width / $src_scale; $des_height = ($des_height >= $forcedheight) ? $forcedheight : $des_height; } else { $des_height = ($src_height >= $forcedheight) ? $forcedheight : $src_height; $des_width = $des_height * $src_scale; $des_width = ($des_width >= $forcedwidth) ? $forcedwidth : $des_width; } switch ($imginfo['mime']) { case 'image/jpeg': $img_src = imagecreatefromjpeg($sourcefile); !$img_src && $img_src = imagecreatefromgif($sourcefile); break; case 'image/gif': $img_src = imagecreatefromgif($sourcefile); !$img_src && $img_src = imagecreatefromjpeg($sourcefile); break; case 'image/png': $img_src = imagecreatefrompng($sourcefile); break; case 'image/wbmp': $img_src = imagecreatefromwbmp($sourcefile); break; default : return $return; } $img_dst = imagecreatetruecolor($des_width, $des_height); $img_color = imagecolorallocate($img_dst, 255, 255, 255); imagefill($img_dst, 0, 0 ,$img_color); imagecopyresampled($img_dst, $img_src, 0, 0, 0, 0, $des_width, $des_height, $src_width, $src_height); //$tmpfile = $temp_path.md5($destfile); $tmpfile = $destfile; switch($destext) { case 'jpg': imagejpeg($img_dst, $tmpfile, $imgcomp); break; case 'gif': imagegif($img_dst, $tmpfile, $imgcomp); break; case 'png': imagepng($img_dst, $tmpfile, version_compare(PHP_VERSION, '5.1.2') == 1 ? 7 : 70); break; } $r = array('filesize'=>filesize($tmpfile), 'width'=>$des_width, 'height'=>$des_height);; copy($tmpfile, $destfile); //unlink($tmpfile); imagedestroy($img_dst); return $r; } /* * 图片裁切 * * @param string $srcname 原图片路径(绝对路径/*.jpg) * @param string $forcedheight 裁切后生成新名称(绝对路径/rename.jpg) * @param int $sourcefile 被裁切图片的X坐标 * @param int $destfile 被裁切图片的Y坐标 * @param int $destext 被裁区域的宽度 * @param int $imgcomp 被裁区域的高度 clip('xxx/x.jpg', 'xxx/newx.jpg', 10, 40, 150, 150) */ function clip($sourcefile, $destfile, $clipx, $clipy, $clipwidth, $clipheight) { $getimgsize = getimagesize($sourcefile); if(empty($getimgsize)) { return 0; } else { $imgwidth = $getimgsize[0]; $imgheight = $getimgsize[1]; if($imgwidth == 0 || $imgheight == 0) { return 0; } } if(!function_exists('imagecreatefromjpeg')) { copy($sourcefile, $destfile); return filesize($destfile); } switch($getimgsize[2]) { case 1 : $imgcolor = imagecreatefromgif($sourcefile); break; case 2 : $imgcolor = imagecreatefromjpeg($sourcefile); break; case 3 : $imgcolor = imagecreatefrompng($sourcefile); break; } //$imgcolor = imagecreatefromjpeg($sourcefile); $img_dst = imagecreatetruecolor($clipwidth, $clipheight); $img_color = imagecolorallocate($img_dst, 255, 255, 255); imagefill($img_dst, 0, 0, $img_color); imagecopyresampled($img_dst, $imgcolor, 0, 0, $clipx, $clipy, $imgwidth, $imgheight, $imgwidth, $imgheight); $tmpfile = $destfile; imagejpeg($img_dst, $tmpfile, 100); $n = filesize($tmpfile); copy($tmpfile, $destfile); return $n; } // 先裁切后缩略,因为确定了,width, height, 不需要返回宽高。 function clip_thumb($sourcefile, $destfile, $forcedwidth = 80, $forcedheight = 80) { // 获取原图片宽高 $getimgsize = getimagesize($sourcefile); if(empty($getimgsize)) { return 0; } else { $src_width = $getimgsize[0]; $src_height = $getimgsize[1]; if($src_width == 0 || $src_height == 0) { return 0; } } $src_scale = $src_width / $src_height; $des_scale = $forcedwidth / $forcedheight; if($src_width <= $forcedwidth && $src_height <= $forcedheight) { $des_width = $src_width; $des_height = $src_height; $n = clip($sourcefile, $destfile, 0, 0, $des_width, $des_height); return filesize($destfile); // 原图为横着的矩形 } elseif($src_scale >= $des_scale) { // 以原图的高度作为标准,进行缩略 $des_height = $src_height; $des_width = $src_height / $des_scale; $n = clip($sourcefile, $destfile, 0, 0, $des_width, $des_height); if($n <= 0) return 0; $r = thumb($destfile, $destfile, $forcedwidth, $forcedheight); return $r['filesize']; // 原图为竖着的矩形 } else { // 以原图的宽度作为标准,进行缩略 $des_width = $src_width; $des_height = $src_width / $des_scale; $n = clip($sourcefile, $destfile, 0, 0, $des_width, $des_height); if($n <= 0) return 0; $r = thumb($destfile, $destfile, $forcedwidth, $forcedheight); return $r['filesize']; } } ?> 。
我们php中设置返回内容,会发现,在出现相应情况后,返回内容出现在页面的iframe中,所以我们设定了相应的class,以便前端获得返回内容,做出相应处理。clip(),clip_thumb()为裁剪图片函数,可压缩图片大小,裁取图片以左上角为起点,长宽为100的正方形。 js
复制代码 代码如下
var jsubmit_file = jinput.filter('[name="submit_file"]'); var jfile = jinput.filter('[name="file"]'); var jiframe = $('#iframe'); var jthumb = $('.thumb'); var type = ''; jfile.on('change', function() { var path = jfile.val(); var file_arr = path.split('.'); type = file_arr[file_arr.length-1]; jsubmit_file.trigger('click'); }); jiframe.on('load', function() { var jiframe_message = $(window.frames['iframe'].document).find('.iframe_message'); if(jiframe_message.attr('status') != 0) { var url = this.contentWindow.location.href; var url_arr = url.split('='); jthumb.attr('src', url_arr[1] + '.' + type); } alert(jiframe_message.text()); }),
这样基本就实现了图片上传、上传结果提示、即时显示上传的最新头像这几个功能,网上有各种插件,虽然功能丰富,就是体积太大,这个看我们取舍了.
最后此篇关于php+js iframe实现上传头像界面无跳转的文章就讲到这里了,如果你想了解更多关于php+js iframe实现上传头像界面无跳转的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
背景: 我最近一直在使用 JPA,我为相当大的关系数据库项目生成持久层的轻松程度给我留下了深刻的印象。 我们公司使用大量非 SQL 数据库,特别是面向列的数据库。我对可能对这些数据库使用 JPA 有一
我已经在我的 maven pom 中添加了这些构建配置,因为我希望将 Apache Solr 依赖项与 Jar 捆绑在一起。否则我得到了 SolarServerException: ClassNotF
interface ITurtle { void Fight(); void EatPizza(); } interface ILeonardo : ITurtle {
我希望可用于 Java 的对象/关系映射 (ORM) 工具之一能够满足这些要求: 使用 JPA 或 native SQL 查询获取大量行并将其作为实体对象返回。 允许在行(实体)中进行迭代,并在对当前
好像没有,因为我有实现From for 的代码, 我可以转换 A到 B与 .into() , 但同样的事情不适用于 Vec .into()一个Vec . 要么我搞砸了阻止实现派生的事情,要么这不应该发
在 C# 中,如果 A 实现 IX 并且 B 继承自 A ,是否必然遵循 B 实现 IX?如果是,是因为 LSP 吗?之间有什么区别吗: 1. Interface IX; Class A : IX;
就目前而言,这个问题不适合我们的问答形式。我们希望答案得到事实、引用资料或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the
我正在阅读标准haskell库的(^)的实现代码: (^) :: (Num a, Integral b) => a -> b -> a x0 ^ y0 | y0 a -> b ->a expo x0
我将把国际象棋游戏表示为 C++ 结构。我认为,最好的选择是树结构(因为在每个深度我们都有几个可能的移动)。 这是一个好的方法吗? struct TreeElement{ SomeMoveType
我正在为用户名数据库实现字符串匹配算法。我的方法采用现有的用户名数据库和用户想要的新用户名,然后检查用户名是否已被占用。如果采用该方法,则该方法应该返回带有数据库中未采用的数字的用户名。 例子: “贾
我正在尝试实现 Breadth-first search algorithm , 为了找到两个顶点之间的最短距离。我开发了一个 Queue 对象来保存和检索对象,并且我有一个二维数组来保存两个给定顶点
我目前正在 ika 中开发我的 Python 游戏,它使用 python 2.5 我决定为 AI 使用 A* 寻路。然而,我发现它对我的需要来说太慢了(3-4 个敌人可能会落后于游戏,但我想供应 4-
我正在寻找 Kademlia 的开源实现C/C++ 中的分布式哈希表。它必须是轻量级和跨平台的(win/linux/mac)。 它必须能够将信息发布到 DHT 并检索它。 最佳答案 OpenDHT是
我在一本书中读到这一行:-“当我们要求 C++ 实现运行程序时,它会通过调用此函数来实现。” 而且我想知道“C++ 实现”是什么意思或具体是什么。帮忙!? 最佳答案 “C++ 实现”是指编译器加上链接
我正在尝试使用分支定界的 C++ 实现这个背包问题。此网站上有一个 Java 版本:Implementing branch and bound for knapsack 我试图让我的 C++ 版本打印
在很多情况下,我需要在 C# 中访问合适的哈希算法,从重写 GetHashCode 到对数据执行快速比较/查找。 我发现 FNV 哈希是一种非常简单/好/快速的哈希算法。但是,我从未见过 C# 实现的
目录 LRU缓存替换策略 核心思想 不适用场景 算法基本实现 算法优化
1. 绪论 在前面文章中提到 空间直角坐标系相互转换 ,测绘坐标转换时,一般涉及到的情况是:两个直角坐标系的小角度转换。这个就是我们经常在测绘数据处理中,WGS-84坐标系、54北京坐标系
在软件开发过程中,有时候我们需要定时地检查数据库中的数据,并在发现新增数据时触发一个动作。为了实现这个需求,我们在 .Net 7 下进行一次简单的演示. PeriodicTimer .
二分查找 二分查找算法,说白了就是在有序的数组里面给予一个存在数组里面的值key,然后将其先和数组中间的比较,如果key大于中间值,进行下一次mid后面的比较,直到找到相等的,就可以得到它的位置。
我是一名优秀的程序员,十分优秀!