Laravel框架实现的上传图片到七牛功能详解


Posted in PHP onSeptember 06, 2019

本文实例讲述了Laravel框架实现的上传图片到七牛功能。分享给大家供大家参考,具体如下:

新建项目

这里直接用一个新的Laravel5.3的项目进行演示,其他版本都是一样不会影响功能,顶多是路由位置不一样而已。已有项目的小伙伴可直接跳过次段。

# 新建项目
laravel new laravel-qiniu
cd laravel-qiniu

安装Laravel七牛扩展包

过Composer安装:

composer require zgldh/qiniu-laravel-storage

然后在 config/app.php 中注册服务提供者:

zgldh\QiniuStorage\QiniuFilesystemServiceProvider::class

接下来在 config/filesystems.php 里的disks中新增七牛配置:

'qiniu' => [
  'driver' => 'qiniu',
  'domains' => [
    'default'  => 'xxxxx', //你的七牛域名
    'https'   => 'xxxxx',     //你的HTTPS域名
    'custom'  => 'xxxxx',   //你的自定义域名
   ],
  'access_key'=> '', //AccessKey
  'secret_key'=> '', //SecretKey
  'bucket'  => '', //Bucket名字
  'notify_url'=> '', //持久化处理回调地址
],

OK,扩展包的安装就暂时介绍到这里,接下来我们要去七牛注册一个账号并且将上面的配置完善。

七牛账号注册及配置

先去七牛注册一个账号,点击官网的注册会让我们选择用户类型,这里我就选择个人用户。

接下来按照流程来进项注册就OK了,我就不演示给大家看了。由于我的手机号已经注册了,这里只能给大家看一下我已经添加了存储对象的实例了。

OK ,简单的用图给大家看一下七牛的默认域名及自定义域名在哪里看。下面给大家看一下七牛的秘钥的位置:

点击秘钥管理,就可与看到个人七牛的秘钥了:

七牛在Laravel中的配置

上面已经介绍相关的配置在哪儿,现在我们要将这些配置在Laravel中使用:

上传图片到七牛

简单用一个示例来演示前端上传图片到后台后,用七牛的扩展上传图片

先在 resources\views 下新建 index.blade.php 视图

<!DOCTYPE html>
<html>
<head>
  <title>上传图片</title>
</head>
<body>
  <form method="post" action="" enctype="multipart/form-data">
    <input type="file" name="file">
    <button type="submit">上传图片</button>
  </form>
</body>
</html>

页面代码简单,没有任何样式(请原谅我偷懒),新建 UplaodController 上传文件控制器:

php artisan make:controller UploadController

实现上传方法:

<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use zgldh\QiniuStorage\QiniuStorage;
class UploadController extends Controller
{
  /**
   * 上传文件到七牛
   * @author 高伟
   * @date  2016-11-09T16:58:37+0800
   * @param Request         $request [description]
   * @return [type]              [description]
   */
  public function uploadFile(Request $request)
  {
    // 判断是否有文件上传
    if ($request->hasFile('file')) {
      // 获取文件,file对应的是前端表单上传input的name
      $file = $request->file('file');
      // Laravel5.3中多了一个写法
      // $file = $request->file;
      // 初始化
      $disk = QiniuStorage::disk('qiniu');
      // 重命名文件
      $fileName = md5($file->getClientOriginalName().time().rand()).'.'.$file->getClientOriginalExtension();
      // 上传到七牛
      $bool = $disk->put('iwanli/image_'.$fileName,file_get_contents($file->getRealPath()));
      // 判断是否上传成功
      if ($bool) {
        $path = $disk->downloadUrl('iwanli/image_'.$fileName);
        return '上传成功,图片url:'.$path;
      }
      return '上传失败';
    }
    return '没有文件';
  }
}

添加路由:

// 上传页面视图
Route::get('/upload',function ()
{
  return view('index');
});
// form提交到控制器路由
Route::post('upload','UploadController@uploadFile');

视图页面(resources\views\index.blade.php):

<!DOCTYPE html>
<html>
<head>
  <title>上传图片</title>
</head>
<body>
  <form method="post" action="{{url('upload')}}" enctype="multipart/form-data">
    {{csrf_field()}}
    <input type="file" name="file">
    <button type="submit">上传图片</button>
  </form>
</body>
</html>

OK,刷新页面就能看到上传后的url地址了。这里只是演示一个最简单的实例,路由定义、视图样式、及逻辑层处理大家按照自己的项目来就行了

希望本文所述对大家基于Laravel框架的PHP程序设计有所帮助。

PHP 相关文章推荐
PHP自动生成月历代码
Oct 09 PHP
php 取得瑞年与平年的天数的代码
Aug 10 PHP
二招解决php乱码问题
Mar 25 PHP
phpexcel导入excel数据使用方法实例
Dec 24 PHP
回帖脱衣服的图片实现代码
Feb 15 PHP
PHP加Nginx实现动态裁剪图片方案
Mar 10 PHP
微信自定义菜单的处理开发示例
Apr 16 PHP
学习thinkphp5.0验证类使用方法
Nov 16 PHP
PHP实现求解最长公共子串问题的方法
Nov 17 PHP
laravel 配置路由 api和web定义的路由的区别详解
Sep 03 PHP
laravel 如何实现引入自己的函数或类库
Oct 15 PHP
gearman中worker常驻后台,导致MySQL server has gone away的解决方法
Feb 27 PHP
浅析PHP7 的垃圾回收机制
Sep 06 #PHP
PHP的介绍以及优势详细分析
Sep 05 #PHP
laravel5.1框架基础之Blade模板继承简单使用方法分析
Sep 05 #PHP
Laravel5.4框架中视图共享数据的方法详解
Sep 05 #PHP
php生成微信红包数组的方法
Sep 05 #PHP
Laravel框架创建路由的方法详解
Sep 04 #PHP
Laravel框架查询构造器 CURD操作示例
Sep 04 #PHP
You might like
php中如何防止表单的重复提交
2013/08/02 PHP
PHP获取数组长度或某个值出现次数的方法
2015/02/11 PHP
List the Codec Files on a Computer
2007/06/11 Javascript
Prototype使用指南之selector.js说明
2008/10/26 Javascript
改变隐藏的input中value值的方法
2014/03/19 Javascript
js用typeof方法判断undefined类型
2014/07/15 Javascript
5个书写JavaScript代码的坏习惯,看看你中枪了没?
2014/11/06 Javascript
Vue实现简单分页器
2018/12/29 Javascript
基于jQuery的时间戳与日期间的转化
2019/06/21 jQuery
JS array数组检测方式解析
2020/05/19 Javascript
详解Vue中的MVVM原理和实现方法
2020/07/15 Javascript
使用基于Python的Tornado框架的HTTP客户端的教程
2015/04/24 Python
Python中计算三角函数之cos()方法的使用简介
2015/05/15 Python
python复制文件的方法实例详解
2015/05/22 Python
Python实现判断并移除列表指定位置元素的方法
2018/04/13 Python
Python unittest模块用法实例分析
2018/05/25 Python
Python使用字典的嵌套功能详解
2019/02/27 Python
windows+vscode安装paddleOCR运行环境的步骤
2020/11/11 Python
使用Python下载抖音各大V视频的思路详解
2021/02/06 Python
CSS3模拟动画下拉菜单效果
2017/04/12 HTML / CSS
巴西葡萄酒销售网站:Wine.com.br
2017/11/07 全球购物
加拿大奢华时装品牌:Mackage
2018/01/10 全球购物
新东方旗下远程教育网站:新东方在线
2020/03/19 全球购物
如何现实servlet的单线程模式
2014/08/05 面试题
办加油卡单位介绍信
2014/01/09 职场文书
《小草和大树》教学反思
2014/02/16 职场文书
销售活动策划方案
2014/08/26 职场文书
合法的离婚协议书范本
2014/10/23 职场文书
信访稳定工作汇报
2014/10/27 职场文书
2014年餐厅服务员工作总结
2014/11/18 职场文书
被告答辩状范文
2015/05/22 职场文书
2016年小学教师政治学习心得体会
2016/01/23 职场文书
Python机器学习之基础概述
2021/05/19 Python
vue使用节流函数的踩坑实例指南
2021/05/20 Vue.js
分享mysql的current_timestamp小坑及解决
2021/11/27 MySQL
零基础学java之带参数以及返回值的方法
2022/04/10 Java/Android