uchome中剥离出来的图片上传
代码是从uchome中剥离出来的,并进行了修改,其中class_upload.php可单独作为php上传类使用。
代码如下:
test.php:
<head>
<meta http-equiv=”content-type” content=”text/html; charset=utf-8″ />
</head>
<STYLE>
*{font-size:12px}
</STYLE>
<SCRIPT LANGUAGE=”JavaScript” src=”jquery.js”></SCRIPT>
<table cellspacing=”0″ cellpadding=”0″>
<caption>文件上传</caption>
<tbody id=”attachbodyhidden” style=”display:none”>
<tr>
<td>
<form method=”post” id=”upload” action=”upload.php” enctype=”multipart/form-data” target=”uploadframe”>
<input type=”file” name=”attach” size=”25″ style=”border: 1px solid #CCC;” />
<span id=”localfile”></span>
</form>
</td>
</tr>
</tbody>
<tbody id=”attachbody”></tbody>
</table>
<FORM METHOD=POST ACTION=”upload.php” id=”test” target=”uploadframe” >
<INPUT TYPE=”submit” VALUE=”上传”>
</FORM>
<iframe id=”uploadframe” name=”uploadframe” width=”0″ height=”0″ marginwidth=”0″ frameborder=”0″ src=”about:blank”></iframe>
<SCRIPT LANGUAGE=”JavaScript”>
var aid=1;
var i=0;
var stat=” “;
var nowUid=0
function delAttach(id) {
$(‘#upload_’+id).remove();
if(document.getElementById(‘attachbody’).innerHTML == ”) {
addAttach();
}
}
function addAttach(){
newnode = $(“#attachbodyhidden tr”).clone(true);
var formss,size;
formss=newnode.find(“form”);
size = formss.length;
var id = aid;
for(i=0;i<size;i++)
{
if(formss.eq(i).attr(“id”) == ‘upload’) {
formss.eq(i).attr(“id”,’upload_’ + id)
}
}
tags = newnode.find(“form”).find(“input”);
size=newnode.find(“form”).find(“input”).length;
for(i=0;i<size;i++)
{
if(tags.eq(i).attr(“name”) == ‘attach’) {
tags.eq(i).attr(“id”,’attach_’ + id)
tags.eq(i).attr(“name”,’attach’)
tags.eq(i).bind(“change”,function(){insertAttach(id)})
}
}
tags = newnode.find(“form”).find(“span”);
size=newnode.find(“form”).find(“span”).length;
for(i=0;i<size;i++)
{
if(tags.eq(i).attr(“id”) == ‘localfile’) {
tags.eq(i).attr(“id”,’localfile_’ + id)
}
}
aid++;
$(‘#attachbody’).append(newnode);
}
addAttach();
function insertAttach(id) {
var localimgpreview = ”;
path=$(‘#attach_’+id).val();
var ext = getExt(path);
var re = new RegExp(“(^|\\s|,)” + ext + “($|\\s|,)”, “ig”);
var localfile = path.substr(path.replace(/\\/g, ‘/’).lastIndexOf(‘/’) + 1);
if(path == ”) {
return;
}
var extensions = ‘jpg,gif,png’;
if(extensions != ” && (re.exec(extensions) == null || ext == ”)) {
alert(‘对不起,不支持上传此类扩展名的文件’);
return;
}
var attachexts = new Array();
attachexts[id] = inArray(ext, ['gif', 'jpg', 'png']) ? 2 : 1;
var inhtml = ‘<table cellspacing=”2″ cellpadding=”2″>’;
inhtml += ‘<tr><td><img src=”‘ + path+’” width=”60″ height=”90″></td>’;
inhtml += ‘<td>图片标题:<INPUT TYPE=”text” NAME=”title” size=60><br/>图片描述:<textarea name=”pic_title” cols=”70″ rows=”3″></textarea>’;
inhtml += ‘<span id=”showmsg’ + id + ‘”><a href=”javascript:;” onclick=”delAttach(‘ + id + ‘)”>[' + 'DEL ' + id + ']</a></span>’;
inhtml += ‘</td></tr></table>’;
$(‘#localfile_’+id).html(inhtml);
document.getElementById(‘attach_’ + id).style.display = ‘none’;
addAttach();
}
function getExt(path) {
return path.lastIndexOf(‘.’) == -1 ? ” : path.substr(path.lastIndexOf(‘.’) + 1, path.length).toLowerCase();
}
function inArray(needle, haystack) {
if(typeof needle == ‘string’) {
for(var i in haystack) {
if(haystack[i] == needle) {
return true;
}
}
}
return false;
}
function upload()
{
formss=$(“form[id^=upload_]“);
var nid = formss.get(nowUid).id.split(‘_’);
nid = nid[1];
if(nowUid>0) {
var upobj = $(‘#showmsg’+upid);
upobj.html(stat) ;
}
if($(‘#showmsg’+nid) != null) {
$(‘#showmsg’+nid).html(‘shangchuanzhong……’);
if(nowUid<formss.length-1)
formss.get(nowUid).submit();
}
upid = nid;
nowUid++;
}
</SCRIPT>
upload.php:
<?php
//文件上传类
include(“class_upload.php”);
$path=’upload_file’;
@mkdir($path);
$f = new upfile($path);
$test=$f->upload(‘attach’);
echo “<script>”;
echo “parent.stat = ‘$test’;”;
echo “parent.upload()”;
echo “</script>”;
?>
class_upload.php:
<?php
class upfile{
var $savename;
var $savepath;
var $maxsize = 2000000;
var $max_php_size;
/* 构造函数
* $path 保存路径,$maxsize 文件最大限制
*/
function upfile($path,$maxsize = 0){
$this->savepath = substr($path, -1) == “/” ? $path : $path.”/”;//保存路径,得到类似 hello/
$this->maxsize = !$maxsize ? $this->maxsize : $maxsize;//文件最大字节
$this->max_php_size=ini_get(“upload_max_filesize”)*1024*1024; //2097152
}
/*
* $form 文件表单域名称
* $file 上传文件保存名称,为空或者上传多个文件时由系统自动生成名称
*/
function upload($form, $file = “”){
if(!isset($_FILES[$form])){
return(“指定的文件域名称不存在。”);
}
else{
$filear = $_FILES[$form];
}
if(!is_writable($this->savepath)){
return(“指定的路径不可写。”);
}
if($this->max_php_size < $this->maxsize)
{
return(“不能大于php_ini规定的最大上传大小”);
}
if(empty($filear['size']) || empty($filear['tmp_name']) || !empty($filear['error'])) {
return (‘无法获取文件上传大小’);
}
if($filear["size"] > $this->maxsize){
return(“上传文件 “.$filear["name"].” 大小超出系统限定值[".$this->maxsize." 字节],不能上传。”);
}
$this->getext($filear["name"]);//取得扩展名
$this->set_savename($file);//设置保存文件名
$this->copyfile($filear);
return “上传文件成功”;
}
/*
* $filear 上传文件资料数组
*/
function copyfile($filear){
if(!move_uploaded_file($filear["tmp_name"], $this->savepath.$this->savename)){
$errors = array(
0=>”文件上传成功”,
1=>”上传的文件超过了 php.ini 中 upload_max_filesize 选项限制的值。 “,
2=>”上传文件的大小超过了 HTML 表单中 MAX_FILE_SIZE 选项指定的值。 “,
3=>”文件只有部分被上传。 “,
4=>”没有文件被上传。 “);
return($errors[$filear["error"]]);
}else{
@unlink($filear["tmp_name"]);//删除临时文件
}
}
/*
* 功能: 取得文件扩展名,$filename 为文件名称
*/
function getext($filename){
if($filename == “”) return;
$ext = explode(“.”, $filename);
$this->ext = $ext[1];
}
/*
* $savename 保存名,如果为空,则系统自动生成一个随机的文件名
*/
function set_savename($savename = “”)
{
if ($savename == “”) // 如果未设置文件名,则生成一个随机文件名
{
srand ((double) microtime() * 1000000);
$rnd = rand(100,999);
$name = date(‘U’) + $rnd;
$name = $name.”.”.$this->ext;
} else {
$name = $savename;
}
$this->savename = $name;
}
}
?>

