php+jquery 实现 ajax上传图片到非当前服务器
用 html file控件上传图片,因为 $_FILES[“file”] 是传到当前服务器,想要上传到另外一个服务器需要通过服务器脚本实现。
1.图片上传
引入jquery 和 ajaxfileupload 两个js文件
<input type="button" value="上传icon图片" id="subimg">(146*146) <input type="file" name="iconfile" id="icon" style="display:none"> <input type="hidden" name="icon" id="iconname" value=""> <script> $("#subimg").click(function(){ $("#icon").trigger(\'click\'); }); $("#icon").change(function(){ $.ajaxFileUpload({ url:\'http://***.**/upload\', fileElementId:\'icon\', dataType:\'json\', success:function(data,status){ if(data.stat == 1){ $("#iconname").val(data.iconname); alert(data.str); }else{ alert(data.str); } }, error:function(data,status,e){ alert(\'wrong!\'); alert(e); } }); }); </script>
2.当前服务器接收图片,将图片保存到当前服务器上。
public function upload() { $data = $_FILES[\'iconfile\']; if(empty($data)){ $result = array(\'stat\'=>-1,str=>\'请选择图片\'); echo json_encode($result);exit; } $file_name = $data[\'name\']; // 文件名 $tmp_name = $data[\'tmp_name\']; // 服务器上临时文件名 $file_size = $data[\'size\']; // 文件大小 $file_type = $data[\'type\']; // 文件类型 $arr = explode(\'.\',$file_name); $type = $arr[1]; $file_name = \'icon\'.time().\'.\'.$type; $file_path = \'/data/www/bi.feiliu.com/public/icon/\'.$file_name; if(move_uploaded_file($tmp_name, $file_path) == true ){ $result = array(\'stat\'=>\'1\',\'str\'=>\'添加图片成功\',\'iconname\'=>$file_name); }else{ $result = array(\'stat\'=>\'-2\',\'str\'=>\'添加图片失败\'); } echo json_encode($result); exit; }
3.调用目的服务器的脚本,用来接收图片并保存
file_get_contents($icon_url);
目的服务器脚本
function mkdirs($dir, $mode = 0777){ if (is_dir($dir) || @mkdir($dir, $mode)) return true; if (!mkdirs(dirname($dir), $mode)) return false; return @mkdir($dir, $mode); } $picurl=$_GET["picurl"]; $mubiaoyuming="http://bi.feiliu.com/"; $pic=$picurl; if($picurl=="") die("没有图片地址"); $str= file_get_contents($mubiaoyuming."/".$pic); //http://bi.feiliu.com/head/tk.png $rootdir = \'/data0/www/html/gonghui/camera360\'; //$rootdir=str_replace("\\","/",$rootdir);//转换目录中的dir preg_match("/^[\S]+[\/]/",$pic,$matchs); $dir=""; if($matchs) $dir=$matchs[0]; mkdirs($rootdir."/".$dir); $h=@fopen($rootdir."/".$pic,"w+"); //echo $rootdir."/".$pic;die; echo (@fwrite($h,$str))?"dook":"dopass";