php和ajax上传文件,PHP和AJAX上传文件

写这篇文章主要是不要忘记,而且这种上传还很简单 第一步在视图页面引入两个JS。jquery.js 和 ajaxupload.js script type=text/javascript src=? echo URL_PATH; ?static/admin/js/jquery-1.7.2.js/scriptscript type=text/javascript src=? echo URL_PATH;

写这篇文章主要是不要忘记,而且这种上传还很简单

第一步在视图页面引入两个JS。jquery.js 和 ajaxupload.js

第二步写个JS

如果看不懂的可以网上搜索ajaxupload.js这个JS ,里面有详细的说明。

第三步在相应的处理上传文件的PHP文件中处里这个JS提交的action。这里我要介绍这个PHP上传类

class Uploader

{

private $fileField; //文件域名

private $file; //文件上传对象

private $config; //配置信息

private $oriName; //原始文件名

private $fileName; //新文件名

private $fullName; //完整文件名,即从当前配置目录开始的URL

private $UrlName; //文件名的URL形式

private $fileSize; //文件大小

private $fileType; //文件类型

private $stateInfo; //上传状态信息,

private $stateMap = array( //上传状态映射表,国际化用户需考虑此处数据的国际化

"SUCCESS" , //上传成功标记,在UEditor中内不可改变,否则flash判断会出错

"文件大小超出 upload_max_filesize 限制" ,

"文件大小超出 MAX_FILE_SIZE 限制" ,

"文件未被完整上传" ,

"没有文件被上传" ,

"上传文件为空" ,

"POST" => "文件大小超出 post_max_size 限制" ,

"SIZE" => "文件大小超出网站限制" ,

"TYPE" => "不允许的文件类型" ,

"DIR" => "目录创建失败" ,

"IO" => "输入输出错误" ,

"UNKNOWN" => "未知错误" ,

"MOVE" => "文件保存时出错"

);

/**

* 构造函数

* @param string $fileField 表单名称

* @param array $config 配置项

* @param bool $base64 是否解析base64编码,可省略。若开启,则$fileField代表的是base64编码的字符串表单名

*/

public function __construct( $fileField , $config , $base64 = false )

{

$this->fileField = $fileField;

$this->config = $config;

$this->stateInfo = $this->stateMap[ 0 ];

$this->upFile( $base64 );

}

/**

* 上传文件的主处理方法

* @param $base64

* @return mixed

*/

private function upFile( $base64 )

{

//处理base64上传

if ( "base64" == $base64 ) {

$content = $_POST[ $this->fileField ];

$this->base64ToImage( $content );

return;

}

//处理普通上传

$file = $this->file = $_FILES[ $this->fileField ];

if ( !$file ) {

$this->stateInfo = $this->getStateInfo( 'POST' );

return;

}

if ( $this->file[ 'error' ] ) {

$this->stateInfo = $this->getStateInfo( $file[ 'error' ] );

return;

}

if ( !is_uploaded_file( $file[ 'tmp_name' ] ) ) {

$this->stateInfo = $this->getStateInfo( "UNKNOWN" );

return;

}

$this->oriName = $file[ 'name' ];

$this->fileSize = $file[ 'size' ];

$this->fileType = $this->getFileExt();

if ( !$this->checkSize() ) {

$this->stateInfo = $this->getStateInfo( "SIZE" );

return;

}

if ( !$this->checkType() ) {

$this->stateInfo = $this->getStateInfo( "TYPE" );

return;

}

$this->fullName = $this->getFolder() . '/' . $this->getName();

$this->UrlName .= '/' . $this->fileName;

if ( $this->stateInfo == $this->stateMap[ 0 ] ) {

if ( !move_uploaded_file( $file[ "tmp_name" ] , $this->fullName ) ) {

$this->stateInfo = $this->getStateInfo( "MOVE" );

}

}

}

/**

* 处理base64编码的图片上传

* @param $base64Data

* @return mixed

*/

private function base64ToImage( $base64Data )

{

$img = base64_decode( $base64Data );

$this->fileName = time() . rand( 1 , 10000 ) . ".png";

$this->fullName = $this->getFolder() . '/' . $this->fileName;

if ( !file_put_contents( $this->fullName , $img ) ) {

$this->stateInfo = $this->getStateInfo( "IO" );

return;

}

$this->oriName = "";

$this->fileSize = strlen( $img );

$this->fileType = ".png";

}

/**

* 获取当前上传成功文件的各项信息

* @return array

*/

public function getFileInfo()

{

return array(

"originalName" => $this->oriName ,

"name" => $this->fileName ,

"baseName" => $this->fullName ,

"urlName" => $this->UrlName ,

"size" => $this->fileSize ,

"type" => $this->fileType ,

"state" => $this->stateInfo

);

}

/**

* 上传错误检查

* @param $errCode

* @return string

*/

private function getStateInfo( $errCode )

{

return !$this->stateMap[ $errCode ] ? $this->stateMap[ "UNKNOWN" ] : $this->stateMap[ $errCode ];

}

/**

* 重命名文件

* @return string

*/

private function getName()

{

return $this->fileName = time() . rand( 1 , 10000 ) . $this->getFileExt();

}

/**

* 文件类型检测

* @return bool

*/

private function checkType()

{

return in_array( $this->getFileExt() , $this->config[ "allowFiles" ] );

}

/**

* 文件大小检测

* @return bool

*/

private function checkSize()

{

return $this->fileSize <= ( $this->config[ "maxSize" ] * 1024 );

}

/**

* 获取文件扩展名

* @return string

*/

private function getFileExt()

{

return strtolower( strrchr( $this->file[ "name" ] , '.' ) );

}

/**

* 按照日期自动创建存储文件夹

* @return string

*/

private function getFolder()

{

$pathStr = $this->config[ "savePath" ];

if ( strrchr( $pathStr , "/" ) != "/" ) {

$pathStr .= "/";

}

$pathStr .= date( "Ymd" );

if ( !file_exists( $pathStr ) ) {

if ( !mkdir( $pathStr , 0777 , true ) ) {

return false;

}

}

$this->UrlName .= $this->config['saveUrl'] . date( "Ymd" );

return $pathStr;

}

}使用这个类用如下方式

//上传配置

$config = array(

"saveUrl" => URL_PATH . "attached/" ,

"savePath" => ROOT_PATH . "/attached/" , //保存路径

"allowFiles" => array('.gif', '.jpg', '.jpeg', '.png', '.bmp' ) , //文件允许格式

"maxSize" => 2000 //文件大小限制,单位KB

);

//生成上传实例对象并完成上传

$up = new Uploader( "userfile" , $config );

$info = $up->getFileInfo();

然后返回到AJAX的JS处理上传。

本文原创发布php中文网,转载请注明出处,感谢您的尊重!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值