laravel5 图片上传

注意:以下教程,前提就是会laravel框架的,但不会图片上传的童鞋。

话不多说,上代码。


Controller

<?php

namespace App\Http\Controllers\Admin;

use Illuminate\Http\Response;
use Redirect,View;
use Input,DB,Request;

/**
 * @since 2016/11/21
 */
class ArticleController extends \App\Http\Controllers\Admincontroller{

  protected $article='';

  public function __construct()
  {
    $this->uploadImg = new \App\AdminModels\UploadsImg;
  }

  public function addArticle()
 {
      if(Input::method() == 'POST'){

          $data = Input::all();//后期考虑加一个公共方法进行表单数据的全部过滤

          //接收文件信息
          $file = Input::file('cover');
          $path = '/uploads/cover';
          $rule =['jpg','png','gif'];
          //进行上传
          $img = $this->uploadImg->upload_img($file,$path,$rule);
                 return $img;//图片名称加保存路径
         }
  }
}

Model

<?php

namespace App\AdminModels;

use Illuminate\Foundation\Auth\User as Authenticatable;
use Illuminate\Http\Response;
use Input,DB,Request;
use Validator;

/**上传图片模型层*/
class UploadsImg extends Authenticatable
{
	/**
	 * 上传文件公共方法
	 * @since 2016/11/22
	 * @param  $file 文件
	 * @param  $path 保存路径
	 * @return $filename 文件名称
	 */
	public function upload_img($file,$url_path,$rule)
	{ 
  		// 检验一下上传的文件是否有效.  
  		if($file->isValid()){  
  		// 缓存在tmp文件夹中的文件名 例如 php8933.tmp 这种类型的.  
  		$clientName = $file -> getClientOriginalName();  
  		$tmpName = $file ->getFileName();   
  		// 这个表示的是缓存在tmp文件夹下的文件的绝对路径(这里要注意,如果我使用接下来的move方法之后, getRealPath() 就找不到文件的路径了.因为文件已经被移走了.所以这里道出了文件上传的原理,将文件上传的某个临时目录中,然后使用Php的函数将文件移动到指定的文件夹.)  
  		$realPath = $file -> getRealPath(); 
  		// 上传文件的后缀. 
  		$entension = $file -> getClientOriginalExtension();

  		if(!in_array($entension,$rule)){

  			return '图片格式为jpg,png,gif';
  		}
  		// 大家对mimeType应该不陌生了. 我得到的结果是 image/jpeg.(这里要注意一点,以前我们使用 mime_content_type() ,在php5.3 之后,开始使用 fileinfo 来获取文件的mime类型.所以要加入 php_fileinfo的php拓展.windows下是 php_fileinfo.dll,在php.ini文件中将 extension=php_fileinfo.dll前面的分号去掉即可.当然要重启服务器. )  
  		$mimeTye = $file -> getMimeType();
  		// (第一种)最后我们使用  
  		//$path = $file -> move('storage/uploads');  
  		// 如果你这样写的话,默认是会放置在 我们 public/storage/uploads/php79DB.tmp   
  		// 貌似不是我们希望的,如果我们希望将其放置在app的storage目录下的uploads目录中,并且需要改名的话..  
  		//(第二种)  
  		$newName = md5(date("Y-m-d H:i:s").$clientName).".".$entension;  
  		$path = $file -> move($url_path,$newName); 
  		// 这里public_path()就是public文件夹所在的路径.$newName 通过算法获得的文件的名称.主要是不能重复产生冲突即可.  
  		// 利用日期和客户端文件名结合 使用md5 算法加密得到结果.后面加上文件原始的拓展名.
                //文件名
                $namePath = $url_path.'/'.$newName;
  		return ['name' => $newName,'path' => $namePath];
  		}
	}
}

View

<form action="/admin/addArticle" method="post" enctype="multipart/form-data">
            <table class="table table-hover">
            <tbody>
                <tr>
                    <td><label class="control-label">文章封面:</label></td>
                    <td>
                       <a href="javascript:;" class="file">选择文件
                           <input type="file" name="cover" id="">
                       </a> 
                    </td>
                </tr>
                <tr>
                    <td colspan="2"><input type="submit" class="btn btn-success" value="确定"></td>
                </tr>
            </tbody>
            </table>
        </form>

表单就很随便了,重要的是控制器和模型层,相信你们能看懂的,如果还是不懂可以私信我,好了,结束!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

JSON_L

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值