PHP从网络下载图片并上传到阿里云OSS服务器的方法Demo
- 13031
- PHP
- 0
- super_dodo
- 2017/04/07
阿里云的oss存储越来越多的被广大开发者使用,且阿里云的存储系统可以帮开发者节省开发时间,运维时间,以及不必要的风险(老的文件系统单目录不建议超过2000个文件,文件数目过多文件索引寻找就很耗时耗资源)等。至于阿里云OSS存储的好处罄竹难书,存在即合理,现在这么流行,一定有其过人之处。
使用阿里云oss的时候建议先去看看相关的文档,且把sdk下载下来,引入到你的项目之中。
Oss的sdk下载clone的地址:https://github.com/aliyun/aliyun-oss-php-sdk/tree/master/src/OSS
Oss的api地址:https://help.aliyun.com/document_detail/31947.html
//定义一些常量 CONST OSS_ACCESS_KEY_ID = 'n**************uc'; //AccessKeyID CONST OSS_ACCESS_KEY_SECRET = 'Gb************************Tu'; //AccessKeySecret CONST OSS_BUCKET_NAME = 'dodo2017'; //此名字不可以重复 CONST OSS_ENDPOINT = 'http://oss-cn-hangzhou.aliyuncs.com'; //阿里云杭州 CONST OSS_URL_PREFIX = 'http://'.self::OSS_BUCKET_NAME.'.oss-cn-hangzhou.aliyuncs.com'; //通过一个URL地址进行下载图片到本地目录,并上传到OSS,返回OSS的url地址 public static function uploadImageFromUrl(){ //图片地址--网络 $img_url = 'http://www.dodobook.net/wp-content/uploads/2016/11/win8_theme_1.png'; //把图片下载到本地 $localImgDir = self::imgDownLocal($img_url); //把本地图片上传到阿里云Oss $oss_img_url = self::imgUploadOss($localImgDir); echo $oss_img_url; //得到oss的图片地址 return $oss_img_url ?? false; } //把图片下载到本地的目录,返回本地目录 public static function imgDownLocal($img_url){ $path = ''; //默认路径 $cacheDir = Yii::$app->basePath.'/upload/'; //图片本地目录地址 if(!is_dir($cacheDir)){ //如果目录不存在 mkdir($cacheDir,0777,true); //创建目录 // exec("chmod -R 777 {$cacheDir} "); //更改相关的权限 } //使用linux的wget去下载文件(对于大文件有好处) $cmd = "wget --no-check-certificate -P {$cacheDir} {$img_url}"; exec($cmd, $output, $returnValue); if ($returnValue == 0) { $path = $cacheDir.'/'.basename($img_url); } return $path; //返回本地的地址 } //通过本地图片路径上传到oss服务器--返回oss的URL地址 public static function imgUploadOss($localImgDir){ //实例化oss--先在头部引入OssClient $ossClient = new OssClient(self::OSS_ACCESS_KEY_ID,self::OSS_ACCESS_KEY_SECRET,self::OSS_ENDPOINT); //上传图片的示例--本地图片 $dir_prefix = Yii::$app->basePath.'/upload/'; //图片本地目录地址 $object = str_replace($dir_prefix,'',$localImgDir); $ossClient->uploadFile(self::OSS_BUCKET_NAME,$object,$localImgDir); //返回值为null $oss_img_url = self::OSS_URL_PREFIX.'/'.$object; @unlink($localImgDir); //删除图片 return $oss_img_url; //返回oss的图片真实地址 }
图片下载到本地还有很多方法,如下所示。也可以直接file_get_content()等.但是对于图片都没什么影响,对于大文件的话还是建议使用wget,因为fread fwrite这类的方法是把文件读取到内存中,对于大文件会把内存撑爆发生事故。使用wget则是下载一部分写磁盘一部分。这样安全很多。
function GrabImage($url) { if (!$url) return false; //如果$url地址为空,直接退出 $imgArr = explode('/',$url); $filename = $imgArr[count($imgArr)-1]; ob_start();//打开输出 readfile($url);//输出图片文件 $img = ob_get_contents();//得到浏览器输出 ob_end_clean();//清除输出并关闭 $size = strlen($img);//得到图片大小 $fp2 = @fopen($filename, "a"); fwrite($fp2, $img);//向当前目录写入图片文件,并重新命名 fclose($fp2); return $filename;//返回新的文件名 }
温馨提示,在一家有点规模的开发团队里面,得到准确的相关账号key以及后台的权限是很重要的,不然只能摸石头过河,遇到这种情况最快速高效的方法就是厚着脸皮去问,不要怕出错或出丑,三人行必有我师。dodo就是比较笨拙因为一个key弄错了,走了一些弯路也荒废了好多时间。所以迈开腿张开口,像销售一样去战斗吧。
无论我们走到哪里,有 5 样东西不能丢弃:1.追求,没有目标,你就失去了精神的信仰;2.尊严,它能支撑你的脊梁,让你高傲的或者;3.自信,千钧压顶何须叹,披荆斩棘向看;4.坚韧,成败皆在毫厘之间,只要你选择的,再苦再难都要挺住;5.知识,千金易散尽,善学是财富,唯有知识能够创造一切。
相关阅读
- 通过Google API客户端访问Google Play帐户报告PHP库
- PHP执行文件的压缩和解压缩方法
- 消息中间件MQ与RabbitMQ面试题
- 如何搭建一个拖垮公司的技术架构?
- Yii2中ElasticSearch的使用示例
热门文章
- 通过Google API客户端访问Google Play帐户报告PHP库
- PHP执行文件的压缩和解压缩方法
- 消息中间件MQ与RabbitMQ面试题
- 如何搭建一个拖垮公司的技术架构?
- Yii2中ElasticSearch的使用示例
最新文章
- 通过Google API客户端访问Google Play帐户报告PHP库
- PHP执行文件的压缩和解压缩方法
- 消息中间件MQ与RabbitMQ面试题
- 如何搭建一个拖垮公司的技术架构?
- Yii2中ElasticSearch的使用示例