Blogger Information
Blog 1
fans 0
comment 1
visits 1187
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
Laravel5.6 + 阿里云OSS 完成图文分离架构
马俊
Original
1187 people have browsed it

本案例采用 Laravel5.6 + 阿里云OSS 完成图片上传功能,全是干货,按步骤操作即可完成。

在部署环境之前,我们需要去阿里云平台注册一个账号,个人账号和公司账号都可以,注册完成后,复制access_key和access_secret配置在项目中就完成了项目的基本设置。

一. 新建项目,安装Laravel5.6版本的框架代码

1. 环境配置要求

Laravel 对系统有一些要求,您的服务器满足下面的要求:

PHP >= 7.1.3

OpenSSL PHP

PHP PDO 扩展

PHP Mbstring 扩展

PHP Tokenizer 扩展

PHP XML 扩展

PHP Ctype 扩展

PHP JSON 扩展

备注:您需要达到以上的配置要求,这个就不具体详细说明,具体看php语法

2. 安装Laravel5.6框架

Laravel5.6 使用 Composer 来管理项目依赖。因此,在使用 Laravel5.6 之前,请确保你的机器已经安装了 Composer。

  1. composer -v

备注:composer具体安装请参照上面链接,按文档安装即可
下面我们具体安装Larvael5.6框架,在控制窗口输入一下内容(本人windows操作系统),等待安装完成。

  1. composer create-project --prefer-dist laravel/laravel blog

安装完成后执行以下代码,为应用程序设置随机字符串密钥。

  1. php artisan key:generate

在浏览器中输入:http://localhost/blog/public/index.php,看到如下界面就是访问正常了。

3. composer.json配置阿里云组件包

在require中添加"jacobcyl/ali-oss-storage": "^2.1"

  1. require”: {
  2. php”: “^7.1.3”,
  3. fideloper/proxy”: “^4.0”,
  4. laravel/framework”: 5.8.*”,
  5. laravel/tinker”: “^1.0”,
  6. jacobcyl/ali-oss-storage”: “^2.1
  7. },

然后执行命令:

  1. composer update
  2. composer dumpautoload


组件下载完成后,如下图:

4. 配置阿里云access_key和access_secret配置(OSS自行开通)

这里很关键:我的是单独写了一个文件进行配置

第一步:在config/app.php的providers下添加:
  1. Jacobcyl\AliOSS\AliOssServiceProvider::class,
第二步:在app/filesystems.php中的disks里下添加
  1. 'oss' => [
  2. 'driver' => 'oss',
  3. 'access_id' => env('OSS_ACCESS_ID', '填你自己的'),
  4. 'access_key' => env('OSS_ACCESS_KEY', '填你自己的'),
  5. 'bucket' => env('OSS_BUCKET', '填你自己的'),
  6. 'endpoint' => env('OSS_ENDPOINT', 'oss-cn-hangzhou.aliyuncs.com'),
  7. 'isCName' => false,
  8. 'debug' => true,
  9. ],
第三步:新建文件alioss.php文件
  1. <?php
  2. return [
  3. 'OSS_ACCESS_ID' => env('OSS_ACCESS_ID', '填你自己的'),
  4. 'OSS_ACCESS_KEY'=> env('OSS_ACCESS_KEY', '填你自己的'),
  5. 'OSS_ENDPOINT' => env('OSS_ENDPOINT', 'oss-cn-hangzhou.aliyuncs.com'),
  6. 'OSS_BUCKET' => env('OSS_BUCKET', '填你自己的'),
  7. 'OSS_HOST' => 'https://填你自己的.oss-cn-hangzhou.aliyuncs.com',//前台显示域名
  8. 'OSS_URL' => 'https://填你自己的.oss-cn-hangzhou.aliyuncs.com', // CDN域名,没有CDN就和OSS_HOST一致即可
  9. ];

文件就已经加载完成。

二. 编写接口控制器方法

新建控制器:UploadsController 继承 Controller类,方便操作。

第一步:编写API路由

Route::post(‘/index/image’, ‘Index\UploadsController@index’);

第二步:编写控制器,上传图片(核心代码)
  1. public function index(Request $request)
  2. {
  3. $disk = \Storage::disk('oss');
  4. if (!isset($request->image)) {
  5. return $this->array_format('图片信息错误' . __LINE__, 414);
  6. }
  7. switch ($request->source) {
  8. case 'file':
  9. if (!($request->hasFile('image') && $request->file('image')->isValid())) {
  10. return $this->array_format('图片信息错误' . __LINE__, 414);
  11. }
  12. $file = $request->file('image');
  13. $image_str = @file_get_contents($file->getPathname());
  14. $base64_str = base64_encode($image_str);
  15. break;
  16. case 'url':
  17. $image_str = @file_get_contents($request->image);
  18. $base64_str = base64_encode($image_str);
  19. break;
  20. case 'base64':
  21. $base64_str = $request->image;
  22. break;
  23. default:
  24. return $this->array_format('图片类型错误', 414);
  25. break;
  26. }
  27. //获取图片信息
  28. $image_info = $this->base64_image_format($base64_str);
  29. if (!$image_info) {
  30. return $this->array_format('图片信息错误' . __LINE__, 414);
  31. }
  32. if ($image_info['image_size'] > 10 * 1024 * 1024) {
  33. return $this->array_format('图片信息太大', 414);
  34. }
  35. $image_path = 'uploads/image/'. date('Ym');
  36. $image_name = $image_path . '/' . md5($image_info['image_str']) . '.' . $image_info['image_suffix'];
  37. //上传图片
  38. $temp = $disk->put($image_name, $image_info['image_str']);
  39. if (!$temp) {
  40. return $this->array_format('上传失败', 414);
  41. }
  42. return $this->array_format('上传成功', 200, [
  43. 'image_name' => $image_name,
  44. 'image_url' => $disk->url($image_name),
  45. ]);
  46. }

四. Postman工具接口测试

公众号(Laravel技术社区)回复“阿里云OSS”,下载案例源码。

Statement of this Website
The copyright of this blog article belongs to the blogger. Please specify the address when reprinting! If there is any infringement or violation of the law, please contact admin@php.cn Report processing!
All comments Speak rationally on civilized internet, please comply with News Comment Service Agreement
0 comments
Author's latest blog post