zoukankan      html  css  js  c++  java
  • 上传图片,将图片保存在腾讯云(2种方式)

    sdk下载地址:https://cloud.tencent.com/document/product/436/6274

    文件结构:

    1.手动上传图片,传到腾讯云

    img.php

    1 <!--enctype属性标识提交表单时要用哪种内容类型,我们这是上传文件(二进制数据),使用multipart/form-data-->
    2 <form action="upload_img.php" method="post" enctype="multipart/form-data">
    3     <input type="file" name="file" id="file"/>
    4     <input type="submit" value="Submit"/>
    5 </form>

    upload_img.php

     1 <?php
     2 //    通过使用 PHP 的全局数组 $_FILES,你可以从客户计算机向远程服务器上传文件。
     3     $filename=$_FILES["file"]["name"];
     4     $filesize=$_FILES["file"]["size"];
     5     $filetmp_name=$_FILES["file"]["tmp_name"];
     6     $filetype=$_FILES["file"]["type"];
     7     $rs=astrict($filename,$filesize,$filetmp_name,$filetype);
     8     
     9     if ($rs=='onlyjpg' ||$rs=='big' || $rs=='dengrous'){
    10         exit(json_encode(array('code'=>'0','msg'=>$rs)));
    11     }
    12 //    explode:将字符串打散为数组
    13     $ns=explode('.',$rs);
    14     if (count($ns)<2){
    15         exit($transCountImg[$rs]);
    16     }
    17     require('cos/include.php');
    18     use QcloudCosApi;
    19     $config = array(
    20         'app_id' => '1256728598',
    21         'secret_id' => 'AKIDZy96qOJofIgroXQGG1XnnX1FFzThfNp5',
    22         'secret_key' => 'A7tsgGckeJkxvfARTHqAE3cw0pPoyznN',
    23         'region' => 'gz',
    24         'timeout' => 60
    25     );
    26     date_default_timezone_set('PRC');
    27     $cosApi = new Api($config);
    28     $y=date('Y');
    29     $m=date('m');
    30     $nad=basename($rs);
    31     $dst='/img/'.$y.'/'.$m.'/'.$nad;
    32     $buffer='test';
    33     $rets=$cosApi->upload($buffer,$rs,$dst);
    34 //    var_dump($rets);
    35     if ($rets['code'] !='0' || strtoupper($rets["message"]) !='SUCCESS'){
    36         exit($rets["message"]);
    37     }
    38 //    图片上传到腾讯云后,删除服务器对应文件夹的图片
    39     exec("rm -rf $rs");
    40     $url=$rets["data"]["source_url"];
    41     $url=str_replace('http://','https://',$url);
    42     exit(json_encode(array('code'=>'1','msg'=>$url)));
    43     
    44     function astrict($picName,$picSize,$picTemp,$picType){
    45         $rd=getimagesize($picTemp);
    46         //限制图片的内容只能为jpg和png
    47         if ($rd['mime'] != 'image/jpeg' && $rd['mime'] !='image/png'){
    48             return 'onlyjpg';
    49             exit();
    50         }
    51         if ($picName != ""){
    52             //限制图片大小
    53             if ($picSize > 2097152){
    54                 return "big";
    55                 exit();
    56             }
    57             //判断图片类型
    58             if ($picType !='image/jpeg' && $picType !="iamge/png"){
    59                 return 'onlyjpg';
    60                 exit();
    61             }
    62         }
    63         $rand=rand(100,999);
    64         $pics=md5(date("YmdHis").$rand).".jpg";
    65         $src = './upload/' . $pics;
    66         //检测不良字符串
    67         if (file_exists($picTemp)) {
    68             $resource = fopen($picTemp, 'rb');
    69             $fileSize = filesize($picTemp);
    70             fseek($resource, 0);
    71         } else {
    72             exit($transCountImg["existent"]);
    73         }
    74         if ($fileSize > 512) { // 取头和尾
    75             $hexCode = bin2hex(fread($resource, 512));
    76             fseek($resource, $fileSize - 512);
    77             $hexCode .= bin2hex(fread($resource, 512));
    78         } else { // 取全部
    79             $hexCode = bin2hex(fread($resource, $fileSize));
    80         }
    81         fclose($resource);
    82         if (preg_match("/(3c25.*?28.*?29.*?253e)|(3c3f.*?28.*?29.*?3f3e)|(3C534352495054)|(2F5343524950543E)|(3C736372697074)|(2F7363726970743E)/is", $hexCode)) {
    83             return 'dengrous';
    84             exit();
    85         }
    86         move_uploaded_file($picTemp,$src);
    87         return $src;
    88     }

    在学习中遇到的问题:

    1. (img.php)form的enctype一定要为multipart/form-data
    2. (upload_img.php)第47行和58行,同时判断图片类型,因为双重判断效果会更好。参考:http://www.lao8.org/article_1479/getimagesize_type
    3. (upload_img.php)第66行到85行,是为了检测图片内容是否含有不良字符。参考:https://www.cnblogs.com/jingmin/p/6308870.html
    4. 最重要的一点,坑爹啊,花费了近半小时的时候。第65行,将临时图片存入对应路径的时候,文件夹一定要设置777权限。

    2.通过抓取到的url图片地址,传到腾讯云

    Test.php

     1 <?php
     2     require('cos/include.php');
     3     use QcloudCosApi;
     4     $config = array(
     5         'app_id' => '1256728598',
     6         'secret_id' => 'AKIDZy96qOJofIgroXQGG1XnnX1FFzThfNp5',
     7         'secret_key' => 'A7tsgGckeJkxvfARTHqAE3cw0pPoyznN',
     8         'region' => 'gz',
     9         'timeout' => 60
    10     );
    11     date_default_timezone_set('PRC');
    12     $cosApi = new Api($config);
    13     $url="https://ss3.bdstatic.com/70cFv8Sh_Q1YnxGkpoWK1HF6hhy/it/u=38344941,2783861310&fm=27&gp=0.jpg";
    14     $content=file_get_contents($url);
    15     file_put_contents('./img.jpg',$content);
    16 
    17     $bucket='test';
    18     $rs='./img.jpg';
    19     $y = date('Y');
    20     $m = date('m');
    21     $nad = basename($rs);
    22     $dst = '/img/' . $y . '/' . $m . '/' . $nad;
    23 
    24     $rets= $cosApi->upload($bucket, $rs, $dst);
    25 //    var_dump($rets);
    26     $url = $rets['data']['source_url'];
    27     $url = str_replace('http://', 'https://', $url);
    28 
    29     exit(json_encode(array('code'=>'1','msg'=>$url)));

    在学习中遇到的问题:

    1. 因为是先学习的上传图片到腾讯云,思路一直死死的停留在通过$_FILES接收到的参数取做,上传等操作,后仔细一想,不对。$_FILES是一个全局数组,怎么会接收一个url地址的图片呢?
    2. 正确的思路是这样的。先下载图片到服务器,在上传图片到腾讯云
    3. 下载图片通过(file_get_contents、file_put_contents)
  • 相关阅读:
    C++003类的析构函数
    C++002类的构造函数
    C++001类
    simulink与控制系统仿真01自动控制原理简介
    telnet
    WEB
    Python_包
    Python_装饰器
    Pycharm+Tensorflow安装和使用出现的问题集合
    HTML+CSS综合使用
  • 原文地址:https://www.cnblogs.com/8013-cmf/p/9046531.html
Copyright © 2011-2022 走看看