php 之跨域上传图片

时间:2022-01-06 01:36:40

因为要将所有上传的图片上传到一*立的图片服务器上面,js上传时存在跨域问题,网上找到这种,通过php curl方式,将图片重新发送到另外一台服务器上保存,并返回图片路径!

这种方式存在一定问题:
1,上传大图片时,比如2M,需要将图片首先传到服务器,然后再传到图片服务器,中间需要4M的传输,加大了上传时间!
2,从服务器转到图片服务器的时候因为没有保存,传输使用的是临时文件,考虑到图片格式的限制,将图片进行了重命名,传输之后对该图片进行删除,碰到一些未知问题是可能导致图片删除失败,增加了服务器存储空间!

代码如下:

  1. public function upload($files = ''){
  2. if($files === ''){
  3. $files  =   $_FILES;
  4. }
  5. if(empty($files)){
  6. $this->error = '没有上传的文件!';
  7. return false;
  8. }
  9. $ext = pathinfo(strip_tags($files['file']['name']), PATHINFO_EXTENSION);
  10. $new_name = dirname($files['file']['tmp_name']).'/'.date("YmdHis").rand(0,99).".".$ext;
  11. rename($files['file']['tmp_name'],$new_name);
  12. $fields['img'] = '@'.$new_name;
  13. //初始化curl
  14. $ch = curl_init();
  15. curl_setopt($ch,CURLOPT_URL, $this->url);
  16. curl_setopt($ch, CURLOPT_POST, 1 );
  17. curl_setopt($ch, CURLOPT_POSTFIELDS, $fields );
  18. curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
  19. //运行curl
  20. $r = curl_exec($ch);
  21. curl_close($ch);
  22. @unlink($new_name);
  23. if($r){
  24. return json_decode($r,true);
  25. }else{
  26. $this->error = "请求失败";
  27. return false;
  28. }
  29. }
php 之跨域上传图片