`
bobboy007
  • 浏览: 31517 次
  • 性别: Icon_minigender_1
  • 来自: 淄博
社区版块
存档分类
最新评论

自写的简单实用的图片上传类(一张或多张图片)

阅读更多

 某天想整理个简洁好用的上传类,所以自己搜索了下看到代码都n多,看的我头大。所以索性自己写了个。

看代码,用法在后边,也可上传flash:

小技巧:判断是否是图片可直接用getimagesize判断,因若不是图片此函数会返回false

功能:上传一张或多张图片,或上传flash,并且记入上传图片到数据库

返回:返回数组包括 标识,相对路径和绝对路径

<?
/**
 * @author bobboy007@gmail.com
 *jyw
 */
class uploadfile{
	var $uploaddir='';
	var $webroot = '';
 	/**
 	 * 设置上传目录最后带 '/'
 	 * @param $webroot
 	 * @param $dirpath
 	 * @return void
 	 */
 	function setuploaddir($webroot,$dirpath){
		$this->webroot = $webroot;
		$path =$this->webroot.$dirpath .date("Ym")."/";
		is_dir($path) || $this->make_dir($path);
		$this->uploaddir = $path;
	}
	
	/**
	 * 上传一张图片,type=1是图片,否则flash,返回array(1,相对路径,全路径)
	 * @param $filearr
	 * @param $type
	 * @return array
	 */
	function uploadimg($filearr,$type=1){
		if($type==1){//图片
 			$imginfo = getimagesize($filearr["tmp_name"]);
			if(!$imginfo)	return array(-1,'imagetype error');
		}else{
			$swfmime = 'application/x-shockwave-flash';
			if($swfmine != $filearr['type'])return array(-1,'swftype error');
		}
 		$extname = strtolower(pathinfo($filearr["name"], PATHINFO_EXTENSION)); //扩展名
		$newfilename = $this->getfilename();
 		$fullpath = $this->uploaddir."$newfilename.$extname";
 		if(!move_uploaded_file($filearr["tmp_name"], $fullpath))return array(-2,'move tmp error');
		$imgpath = str_replace($this->webroot, '', $fullpath);
		$this->writeimglog($imginfo[0],$imginfo[1],$imgpath);//写入日志
 		return array(1,$imgpath,$fullpath);
  	}
	
	
	/**
	 * 上传多张图片
	 * @param $filearr
	 * @param $type
	 * @return array
	 */
	function uploadmoreimg($filearr,$type=1){
		$rarr = array();
		for($i=0;$i<count($filearr['name']);$i++){
			$farr = array(
				'name'=>$filearr['name'][$i],
				'type'=>$filearr['type'][$i],
				'tmp_name'=>$filearr['tmp_name'][$i],
				'error'=>$filearr['error'][$i],
				'size'=>$filearr['size'][$i]
			);
		 
		 	$rarr[] = $this->uploadimg($farr,$type);
		}
		return $rarr;
	}
	
	
	/**
	 * 返回随机文件名
	 * @return string
	 */
	function getfilename(){
		return strftime("%H%M%S", time()) . mt_rand(1000, 9999);
	}
	
	/**
	 * 写入图片日志到数据库
	 * @param $width
	 * @param $height
	 * @param $uploadpath
	 * @return void
	 */
	function writeimglog($width,$height,$uploadpath){
		global $_SGLOBAL;
		$inarr = array(
			'username'=>$_SGLOBAL['super_username'],
			'uploadtime'=>time(),
			'imgwh'=>$width.'*'.$height,
 			'uploadpath'=>$uploadpath
		);
		inserttable('imagelog',$inarr);
	}
	/**
	 * 创建文件夹,需要全路径
	 * @param $dir
	 * @param $mode
	 * @return void
	 */
	function make_dir($dir, $mode = 0777){
    	if (is_dir($dir) || @mkdir($dir, $mode)) return true;
    	if (!$this->make_dir(dirname($dir), $mode)) return false;
    	return @mkdir($dir, $mode);
	}
}
/*
	$obj_img = new uploadfile();
	$obj_img->setuploaddir(WEB_ROOT,'uploadpic/');
	$file = $obj_img->uploadmoreimg($_FILES["fileup"]);
	print_r($file);
*/
?>

 

 

0
0
分享到:
评论

相关推荐

    thinkphp3.2.3上传多张图片+上传完预览

    在ThinkPHP 3.2.3框架中,上传多张图片是一项常见的功能需求,尤其对于内容管理系统、电子商务网站等,用户可能需要一次上传多张图片进行展示或编辑。本教程将详细讲解如何在ThinkPHP 3.2.3环境下实现这一功能,并...

    swift-上传工具封装并行异步多张上传串行异步按顺序一张张上传

    本文将详细讲解如何封装一个上传工具,实现并行异步多张上传以及串行异步按顺序一张张上传的机制。 首先,让我们了解“并行异步”与“串行异步”的概念。并行异步是指多个任务同时执行,不等待前一个任务完成就启动...

    tinymce 多图片批量上传插件

    综上所述,“tinymce 多图片批量上传插件”通过提供批量上传、拖拽上传、白名单机制以及全选功能,有效地解决了传统图片上传方式中存在的效率低下、操作复杂等问题。它不仅提升了用户操作的便捷性,还保证了服务器的...

    kindEditor+图片批量上传

    总的来说,"KindEditor图片批量上传工具"是一款强大且实用的Web开发组件,它通过便捷的图片上传功能,特别是在处理Word中的数学公式方面,为网页编辑带来了革命性的改变,是现代互联网内容创作不可或缺的辅助工具。

    Retrofit+rxjava+mvp形式上传多张图片完整示例

    在Presenter中,使用RxJava的`fromCallable`或`fromArray`将图片路径列表转换为Observable,然后使用`concatMap`或`flatMap`操作符,确保每张图片上传完成后再处理下一张。最后,订阅这个Observable并处理成功或失败...

    C#多张图片合并成一张

    在C#编程环境中,将多张图片合并成一张图片是一个常见的图像处理任务,尤其是在报表生成、拼图制作或社交媒体分享等方面。在这个项目中,我们使用Visual Studio 2013作为开发工具,通过C#语言来实现这个功能。以下是...

    android多张图片上传,androidhttp方式上传图片,包含数据库和后台php的

    对于多张图片,$_FILES数组会包含多个子数组,每个子数组代表一张图片。你需要遍历这个数组,对每张图片进行验证,如检查文件类型、大小等,然后将其保存到服务器的特定目录。 同时,PHP还需要与数据库交互。在SQL...

    Retrofit+rxjava+mvp形式上传多张图片完整示例后台接收

    在图片上传场景中,Retrofit可以帮助我们定义上传接口,如`@Multipart`注解的`uploadImages`方法,接收一个或多个`@Part`注解的图片文件。 **RxJava** 是一个响应式编程库,能够帮助处理异步数据流。在Android中,...

    JQuery+ajax实现批量上传图片

    延迟的目的是让服务器有足够的时间为前一张图片生成新的名称。 `TajaxFileUpload()`函数是关键的上传逻辑所在。它将逐个处理文件输入框,读取每张图片并使用Ajax发送到服务器。在服务器端,图片通常会被重命名以...

    vue iview多张图片大图预览、缩放翻转

    标签为“vue iview多张图片大图预览 vue iview多张图片预览 vue图片预览缩放翻转”,这些标签指向了本文的核心内容,即如何在Vue和iView的环境下实现图片预览功能,以及如何实现图片的缩放和翻转。这些标签将帮助...

    JS实现图片上传多次上传同一张不生效的处理方法

    在JavaScript实现图片上传的过程中,有时会遇到一个常见问题:用户尝试多次上传同一张图片时,第二次及之后的上传操作可能无法正常工作。这种情况通常是因为浏览器的缓存机制导致的,浏览器认为图片已经被上传过,...

    JAVA实现多页PDF转一张长图图片

    在Java编程环境中,将多页PDF转换为一张长图图片是一项常见的需求,特别是在文档处理、报表可视化或在线阅读场景中。本项目利用了名为`icepdf`的开源库,其核心组件是`icepdf-core-4.3.3.jar`,这是一个强大的PDF...

    简单的图片上传源码

    这个"简单的图片上传源码"提供了一种在VS2008环境下实现这一功能的方法。下面,我们将深入探讨这一功能的核心知识点以及如何实现。 首先,让我们了解图片上传的基本流程。当用户选择一张图片并提交上传请求时,后端...

    jq图片替换效果

    在本文中,我们将深入探讨如何使用jQuery库实现图片替换效果,这是一个在网页动态交互中非常常见且实用的技术。jQuery是一个强大的JavaScript库,它简化了DOM操作、事件处理、动画效果和Ajax交互,使得开发者能够更...

    基于jsp的代码,关于如何把图片上传到硬盘

    通过以上步骤,你可以构建一个简单的JSP图片上传系统。这个过程涉及到了HTML表单、HTTP请求、文件上传处理以及文件I/O等核心概念。在实际应用中,可能还需要考虑其他因素,如错误处理、数据库存储、缩略图生成等。...

    选择本地图片(支持多张图片选择)

    在安卓应用开发中,用户经常需要从设备的相册中选择一张或多张图片进行上传或编辑等操作。这个过程涉及到的不仅仅是简单的文件选取,还涵盖了权限管理、图片加载、内存优化等多个方面。本文将深入探讨如何在安卓端...

    struts2实现单个图片上传

    1. **Action类**:创建一个专门处理图片上传的Action类。继承自`org.apache.struts2.dispatcher.multipart.DefaultMultiPartRequest`或使用Struts2的`@FileUpload`注解来处理文件上传。例如: ```java public class...

    图片上传截取插件

    在实际应用中,图片上传截取插件广泛应用于社交平台的头像设置、电商平台的商品图片上传、在线设计工具等多个场景。它不仅能够满足用户个性化的需求,还能有效降低服务器存储和处理的压力,是现代Web应用不可或缺的...

    webuploader上传单张图片

    WebUploader是阿里大鱼团队开发的一个优秀的前端文件上传组件,尤其在处理图片上传时表现出色。这个组件基于jQuery,提供了一套完整的图片预览、裁剪、上传等功能,且支持多浏览器兼容,包括IE6+。本文将深入探讨...

    微信小程序开发(二)图片上传+服务端接收详解

    需要注意的是,每次调用`wx.chooseImage`,用户最多可以选择9张图片,但`wx.chooseImage`的回调中只会返回选定图片的`filePath`数组,一次只能处理一张图片。这意味着如果需要一次性上传多张图片,开发者需要在...

Global site tag (gtag.js) - Google Analytics