PHP实现跨域多图上传

干货:

问题:在a.com上上传图片至b.com

html(a.com)

<div class="box_03">
    <iframe style="width:100%;height:100%;" frameborder="0" scrolling="no" src="/picupload/ming?imgurl=&shuiyin=&uploadUrl=http://b.com&inputName=logo"></iframe>
    <input type="hidden" name="logo" value="">
</div>

php(a.com)

public function ming(){
        $types=$_GET['types']?$_GET['types']:'www';
        $shuiyin=$_GET['shuiyin']?$_GET['shuiyin']:'';
        $imgurl=$_GET['imgurl'];
        $imgnum=$_GET['imgnum']?$_GET['imgnum']:'1';
        $this->ViewEngine->assign('imgnum', $imgnum);
        $this->ViewEngine->assign('shuiyin', $shuiyin);
        $this->ViewEngine->assign('types', $types);
        $this->ViewEngine->assign('imgurl', $imgurl);
        $this->ViewEngine->display("ming_pic.html");
    }

html(a.com)

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <link rel="stylesheet" href="/picupload/css/base.css">
    <script src="/picupload/js/jquery-1.7.1.min.js"></script>
</head>
<body>
<div class="comment-wrap" id="upload-wrap" style="width: 682px;">
    <div class="comment-up clearfix upload-select-wrap">
        <div class="placeholder upload-placeholder" {if $imgurl neq ''}style="display:none"{/if}><!--修改和style="display:none"删除-->
        <div class="click-up-wrap fl">
            <div class="click-up-show">上传图片</div>
            <div class="click-up-hide">
                <input type="file" name="file" multiple="multiple">
            </div>
        </div>
        <p class="drag-tip fl upload-drag-tip">可直接拖动图片到此区域</p>
    </div>

    <ul class="filelist clearfix upload-preview" {if $imgurl neq ''}style="display:block"{/if} ><!--修改和style="display:block"删除-->
    <div class="click-up-wrap fl">
        <div class="click-up-show">继续添加</div>
        <div class="click-up-hide">
            <input type="file" name="file" multiple="multiple">
        </div>
    </div>
    {if $imgurl neq ''}
    <li>
        <img src="{$imgurl}" data-order="{$imgurl}">
        <div class="file-panel clearfix"><span></span></div>
    </li>
    {/if}
    </ul>
</div>
</div>
<script src="/picupload/js/uploadImg_ming.js"></script>

<script type="text/javascript">
    console.log('444');
    {literal}$("#upload-wrap").uploadImg({{/literal}
        maxUploadImgNum:{$imgnum},  /* @最多可以上传几张图片,并且二次修改时这必须为1 */
        types:'{$types}',    /* @上传到那个目录下 */
            storedInputName:'{$smarty.get.inputName}',  /* @input的name值存储图片链接的 修改上一级ifrem的input name*/
            existedImgUrl: "{$imgurl}",//要修改的图片地址  添加时候为空
            domainName:'{$smarty.get.uploadUrl}',//上传域名, 不填写有一个默认域名http://imgs.hao315.com
            isDelImg:''   /* @news修改文章时,不删除图片源文件   是空的时候删除  任意值 也是删除  只有  news 是不删除*/
        {literal} }){/literal}
</script>

</body>
</html>

js(a.com)

(function ($) {
    $.fn.uploadImg = function (params) {
        /* @参数默认值 */

        var defaults = {
            maxUploadImgNum: 9, /* @最多可以上传几张图片,并且二次修改时这必须为1 */
            existedImgUrl: '', /* @二次修改图片时,页面显示的默认图片 */
            types: 'upload', /* @上传到那个目录下 */
            storedInputName: 'pic3', /* @input的name值存储图片链接的,前台页面入库 */
            isDelImg: '', /* @news修改文章时,不删除图片源文件 */
            domainName: '//imgs.shgao.com', /* @上传的域名 */
        }

        /* @若未传参数则使用默认值 */
        params = params || {};
        for (var def in defaults) {
            if (typeof params[def] === 'undefined') {
                params[def] = defaults[def];
            }
        }
        console.log('aaaa');
        /* @上传图片本地预览 */
        var area = this.find(".upload-select-wrap"); //并且是拖动到的区域
        var waic = window.parent.document.getElementsByClassName("box_03")[0]//
        var dragTip = this.find('.upload-drag-tip'); //拖拽时候的与用户的交互提示
        var placeholder = this.find('.upload-placeholder'); //未选中图片之前展现的内容
        var preview = this.find('.upload-preview'); //选中图片之后浏览列表
        var aInput = area.find("input[name=file]"); //所有的可以上传的的按钮
        var timeStamp = 0;//避免缓存
        /*@用户拖动图片时的交互*/
        area.get(0).ondragover = function (e) {
            e = e || window.event;
            e.preventDefault();
            e.stopPropagation();
            dragTip.innerHTML = "请释放鼠标";
        };
        console.log('2121');
        area.get(0).ondragleave = function () {
            dragTip.innerHTML = "请将图片拖到此区域";
        };
        /*@存储已经拖进的图片的信息{name:"",size:""}*/
        var info = new FormData(); //@php可以直接获得文件对象
        var icun = [];
        var upAllUrl = []; //@传给后台的图片数据
        area.get(0).ondrop = function (e) {
            e = e || window.event;
            e.preventDefault();
            e.stopPropagation();
            dragTip.innerHTML = "请将图片拖到此区域";
            info = new FormData();
            /*@当拖动多个图片时,循环出所有的图片列表*/
            var jlu;
            for (var l = 0; l < e.dataTransfer.files.length; l++) {
                var file = e.dataTransfer.files[l];
                //console.log(file);
                (function (file, l) {
                    jlu = show(file, info, icun, l); //
                })(file, l)
                if (jlu == false) { //当用户选择大于9张的图片时,只提示一次就行
                    break;
                }
            }
            upImgAjax()

        };
        /*@使用input file上传*/
        for (var i = 0; i < aInput.length; i++) {
            aInput[i].onchange = function () {
                var _this = this;
                if (this.value && this.files.length > 0) {
                    info = new FormData()
                    var jlu;
                    for (var j = 0; j < this.files.length; j++) {
                        (function (j) {
                            var item = _this.files.item(j);
                            jlu = show(item, info, icun, j);
                        })(j)
                        if (jlu == false) {
                            break;
                        }
                    }
                    upImgAjax()
                }
                dragTip.innerHTML = "请将图片拖到此区域!";
            }
        }
        if (params.maxUploadImgNum == 1 && params.existedImgUrl != '') {
            upAllUrl.push(params.existedImgUrl);
            icun.push(params.existedImgUrl);
        }

        /*@渲染图片*/
        function show(file, info, icun, j) {
            if (icun.length >= params.maxUploadImgNum) {
                upAllUrl = [];
                icun = [];
                alert('最多只可上传' + params.maxUploadImgNum + '张图片哦');
                return false;
            }
            if (/image/.test(file.type)) {
                icun.push(file); //@前台存储的信息,用来判断用户想要上传图片的张数
                info.append('upload_file' + j, file); //@为FormData对象添加数据
            } else {
                alert("不支持上传该格式的文件。支持上传图片,例如:jpeg、gif、png、jpg")
            }
        }

        /* @图片上传到服务器 */
        function upImgAjax() {
            var data = info;
            timeStamp = new Date().getTime();
            console.log(params.domainName + '/picupload.php?types=' + params.types + '&timeStamp=' + timeStamp);
            console.log(data);
            //发送数据
            $.ajax({
                url: params.domainName + '/picupload.php?types=' + params.types + '&timeStamp=' + timeStamp,
                type: 'POST', /*提交方式*/
                data: data,
                dataType: 'json',
                cache: false,
                contentType: false, /*不可缺*/
                processData: false, /*不可缺*/
                success: function (data) {
                    console.log(data);//得到img url
                    if (data.length > 0) {
                        upAllUrl = upAllUrl.concat(data);
                        // console.log(upAllUrl)
                        for (var w = 0; w < data.length; w++) {
                            var img = new Image();
                            img.src = data[w];

                            IEVersion() < 11 ? img.setAttribute('data-order', data[w]) : img.dataset["order"] = data[w];

                            icun[w].order = data[w];
                            var li = document.createElement("li");
                            li.appendChild(img);
                            var div = document.createElement("div");
                            div.className = 'file-panel clearfix';

                            li.appendChild(div);
                            var span = document.createElement("span");
                            div.appendChild(span);

                            placeholder.get(0).style.height = '0';
                            preview.get(0).style.display = 'block';
                            preview.get(0).appendChild(li);
                            judgeNumber(upAllUrl)
                        }
                    }

                },
                error: function () {
                    alert('上传出错');
                }
            });

        }


        /* @IE版本判断,做js方法兼容用到 */
        function IEVersion() {
            var userAgent = navigator.userAgent; //取得浏览器的userAgent字符串
            var isIE = userAgent.indexOf("compatible") > -1 && userAgent.indexOf("MSIE") > -1; //判断是否IE<11浏览器
            var isEdge = userAgent.indexOf("Edge") > -1 && !isIE; //判断是否IE的Edge浏览器
            var isIE11 = userAgent.indexOf('Trident') > -1 && userAgent.indexOf("rv:11.0") > -1;
            if (isIE) {
                var reIE = new RegExp("MSIE (\\d+\\.\\d+);");
                reIE.test(userAgent);
                var fIEVersion = parseFloat(RegExp["$1"]);
                if (fIEVersion == 7) {
                    return 7;
                } else if (fIEVersion == 8) {
                    return 8;
                } else if (fIEVersion == 9) {
                    return 9;
                } else if (fIEVersion == 10) {
                    return 10;
                } else {
                    return 6; //IE版本<=7
                }
            } else if (isEdge) {
                return 'edge'; //edge
            } else if (isIE11) {
                return 11; //IE11
            } else {
                return -1; //不是ie浏览器
            }
        }

        /* @图片从服务器上删除
         * @ 图片hover, 点击删除按钮, 删除元素本身, 删除icun中对应的存储信息, 删除同时,改变栏目中的图片队列的张数以及所有图片的总大小
         */
        if ($.fn.jquery < '1.7.1') {
            $(preview).find('li .file-panel').bind("click", function (e) {
                var _othis = $(this);
                delImg(e, _othis)
            });
        } else {
            $(preview).on('click', 'li .file-panel', function (e) {
                var _othis = $(this);
                delImg(e, _othis)
            })
        }

        function delImg(e, _othis) {
            e = e || window.event;
            var target = e.srcElement || e.target;
            var imgUrl = _othis.siblings('img')[0].getAttribute('data-order');
            var _this = this;
            /* @修改图时要覆盖1 */
            if (params.maxUploadImgNum == 1 && params.existedImgUrl != '') {
                // console.log('修改图时要覆盖1' + params.maxUploadImgNum)
                $(preview).find('li').remove();
                icun = [];
                upAllUrl = [];
            }
            if (params.isDelImg == 'news') {
                $("input[name=img]").val('');
                console.log('不删除图片源文件')
            } else {
                $.ajax({
                    url: params.domainName + '/picupload_delete.php?picUrl=' + imgUrl + '&types=' + params.types + '&timeStamp=' + timeStamp, /*去过那个php文件*/
                    type: 'GET', /*提交方式*/
                    // data:{'picUrl':imgUrl},
                    cache: false,
                    contentType: false, /*不可缺*/
                    processData: false, /*不可缺*/
                    success: function (msg) {
                        console.log(msg);
                        if (msg == 'ok') {
                            var delIdx = upAllUrl.indexOf(imgUrl); //后台传给的图片url,对应删除
                            upAllUrl.splice(delIdx, 1);
                            judgeNumber(upAllUrl)
                            $(_othis).parent('li').remove();
                        } else {
                            console.log(msg);
                            alert('该图片不存在');
                        }
                        /* @服务器上图片删除成功后,再进行改变 */
                        changeNum(icun);
                    },
                    error: function (error) {
                        console.log(error)
                    }

                })
            }
            for (var i = 0; i < icun.length; i++) {
                if ((imgUrl == icun[i].order) || imgUrl == icun[i]) {
                    icun.splice(i, 1);
                }
            }
        }

        function changeNum(icun) {
            var aLi = preview.get(0).querySelectorAll("li");
            if (!aLi.length) {
                info = new FormData();
                icun = [];
                placeholder.get(0).style.display = 'block';
                placeholder.get(0).style.height = 'auto';
                preview.get(0).style.display = 'none';
                document.getElementsByName

            }
        }

        function judgeNumber(upAllUrl) {
            waic.querySelector("input[name=" + params.storedInputName + "]").value = upAllUrl;
            console.log(waic.querySelector("input[name=" + params.storedInputName + "]").value)
        }
    }
})(jQuery);

upload.php(b.com)

<?php
/*
跨域上传图片
Date:2018-8-2
@cyf
*/
//设置上传目录
header("Access-Control-Allow-Origin: *");
$types = $_GET['types'];
if(empty($types)){
    $types = "www";
}
$shuiyin = $_GET['shuiyin'];
if(empty($shuiyin)){
    $shuiyin = "";
}
$path1 = $types."/";
$path2 = $types."/".date('y-m-d').'/';
$dir_base = "$path2";     //文件上传根目录
if(!is_dir($path1)){
       mkdir($path1,0777,true);
   }
   if(!is_dir($path2)){
       mkdir($path2,0777,true);
   }
//返回路径
$url="http://imgs.shgao.cn/";
//没有成功上传文件,报错并退出。
$output = array();
$index = 0;        //$_FILES 以文件name为数组下标,不适用foreach($_FILES as $index=>$file)
foreach($_FILES as $file){
    $upload_file_name = 'upload_file' . $index;        //对应index.html FomData中的文件命名

    //.$_FILES[$upload_file_name]['name']
    $File_type = strrchr($_FILES[$upload_file_name]['name'],'.');
    $code = '';
    for($i=1;$i<=4;$i++){
        $code .= chr(rand(97,122));
    }
    //echo $code;
    $filename =date('YmdHis').$code.rand(99,9999).$File_type;
    $gb_filename = iconv('utf-8','gb2312',$filename);    //名字转换成gb2312处理
    //文件不存在才上传
    if(!file_exists($dir_base.$gb_filename)) {
        $isMoved = false;  //默认上传失败
        $MAXIMUM_FILESIZE = 10 * 1024 * 1024;     //文件大小限制    1M = 1 * 1024 * 1024 B;
        $rEFileTypes = "/^\.(jpg|jpeg|gif|png){1}$/i";
        if ($_FILES[$upload_file_name]['size'] <= $MAXIMUM_FILESIZE &&
            preg_match($rEFileTypes, strrchr($gb_filename, '.'))) {
            $isMoved = @move_uploaded_file ( $_FILES[$upload_file_name]['tmp_name'], $dir_base.$gb_filename);        //上传文件
			if($shuiyin){
			addshuiyin(__DIR__.'/'.$dir_base.$gb_filename,__DIR__.'/'.$shuiyin);
			//addshuiyin(__DIR__.$dir_base.$gb_filename,__DIR__.'/'.$shuiyin);
			}
        }
    }else{
        $isMoved = true;    //已存在文件设置为上传成功
    }
    if($isMoved){
        //输出图片文件<img>标签
        //注:在一些系统src可能需要urlencode处理,发现图片无法显示,
        //请尝试 urlencode($gb_filename) 或 urlencode($filename),不行请查看HTML中显示的src并酌情解决。
        $output[$index]="{$url}{$dir_base}{$filename}";

        //$output .= "<img src='{$url}{$dir_base}{$filename}' title='{$filename}' alt='{$filename}'/>";
    }else {
        //上传失败则把error.jpg传回给前端
        $output[$index]='error';
        //$output .= "<img src='{$dir_base}error.jpg' title='{$filename}' alt='{$filename}'/>";
    }
    $index++;
}

echo json_encode($output);
function addshuiyin($imgurl,$waterImg){
	   $dst_info = getimagesize($imgurl);  
       switch ($dst_info[2]) 
       { 
        case 1: 
        $dst_im =imagecreatefromgif($imgurl);break; 
        case 2: 
        $dst_im =imagecreatefromjpeg($imgurl);break; 
        case 3: 
        $dst_im =imagecreatefrompng($imgurl);break; 
        case 6: 
        $dst_im =imagecreatefromwbmp($imgurl);break; 
        default: 
        die("不支持的文件类型1");exit; 
       } 
       //水印图像 
       //$src = "upload/1.png"; //注意路径要写对 
       $src_info = getimagesize($waterImg); 
       switch ($src_info[2]) 
       { 
        case 1: 
        $src_im =imagecreatefromgif($waterImg);break; 
        case 2: 
        $src_im =imagecreatefromjpeg($waterImg);break; 
        case 3: 
        $src_im =imagecreatefrompng($waterImg);break; 
        case 6: 
        $src_im =imagecreatefromwbmp($waterImg);break; 
        default: 
        die("不支持的文件类型1");exit; 
       }
	   //支持png本身透明度的方式 
	   
       imagecopy($dst_im,$src_im,$dst_info[0]-$src_info[0]-10,$dst_info[1]-$src_info[1]-10,0,0,$src_info[0],$src_info[1]); 

       //保存图片 
       switch ($dst_info[2]){ 
        case 1: 
        imagegif($dst_im,$imgurl);break; 
        case 2: 
        imagejpeg($dst_im,$imgurl,100);break; 
        case 3: 
        imagepng($dst_im,$imgurl);break; 
        case 6: 
        imagewbmp($dst_im,$imgurl);break; 
        default: 
        die("不支持的文件类型2");exit; 
       } 
       imagedestroy($dst_im); 
       imagedestroy($src_im);
}
?>

delete.php(b.com)

<?php
/*
跨域删除
Date:2018-8-3
@cyf
*/
///webdir/html/imgszstvcn/
//http://imgs.zstv.cn/1808/18-08-03/2018080315485471533282534icon_04.png
//$src="http://imgs.zstv.cn/1808/18-08-03/2018080316560551533286565icon_searchqwqwl.png";

header("Access-Control-Allow-Origin: *");
/*$types = $_GET['types'];
if(empty($types)){
    $types = "www";
}
$path1 = $types."/";*/
//$path1 = 'upload/';

//$path2 = date('ym')."/".date('y-m-d').'/';
//print_r($_GET);
//$src="http://pic.37cy.com/91cycc/delete.php?picUrl=http://pic.37cy.com/91cycc/1808/18-08-03/201808031738034153328908304.jpg";

$src=$_GET['picUrl'];

$src=$_GET['picUrl'];
$imgname=substr(strrchr($src,'/'),1);
$aa=trim($src,$imgname);
$bb=str_replace('http://imgs.shgao.cn','',$aa);
$deleteurl=$_SERVER['DOCUMENT_ROOT'].$bb.$imgname;
$res=unlink($deleteurl);
if($res){
	echo'ok';
}else{
	echo'error';
}

?>

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值