laravel 上传图片

前言:数据库存储图片路径,需要完成对图片直接上传到服务器本地进行存储,返回到前端图片路径,根据其他数据一起完成,整体数据保存,图片不单独进行存储数据库。返回图片数据时拼接完整路径展示。

1、前端添加上传图片代码XXX.blade.php

<form action="{{ url('file\upload') }}" method="POST"  accept-charset="UTF-8"  enctype="multipart/form-data">
<input type="file" name="image">
    <button>提交</button>
</form>

2、新增route

    Route::post('file/upload','Upload\ImageController@uploadImg');                  //上传图片

3、后端文件数据处理代码,我这里看网上有很多更好的验证器,我是手写的,因为暂时开发需求没有明确

<?php

namespace App\Http\Controllers\Upload;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Validator;
use Illuminate\Support\Facades\Storage;

class ImageController extends Controller
{
    //意义允许的扩展名
    protected $arrAllowExtension = ['jpg','png','jpeg','gif','bmp'];

    public function uploadImg( Request $request )
    {
        $obFile     = $request->file('image');

        if ( !$obFile )
        {
            return json_response('','文件名错误',400);
        }

        $sOldName   = $obFile->getClientOriginalName();//原名

        $sFileType  = $obFile->getClientMimeType(); //文件类型

        $sExtensionName = $obFile->getClientOriginalExtension();//扩展名

        $sPath      = $obFile->getRealPath();    //文件存储的位置路径

        if ( !in_array($sExtensionName,$this->arrAllowExtension) )
        {
            return json_response('','必须是 jpeg, bmp, png, gif 格式的图片',400);
        }

        //组装文件存储的位置和自定义文件名
        $sFileName = date('Y-m-d') . '/' . getPubId() . '.' .$sExtensionName;

        //调用laravel系统封装好的函数把图片存储到指定文件下
        $bRet = Storage::disk('uploadimg')->put($sFileName,file_get_contents($sPath));

        if ( !$bRet )
        {
            return json_response('','上传失败',400);
        }
        return json_response(['file_name'=>$sFileName],'上传成功',200);
    }
}

这里文件原名和文件mime没有处理,如果有需求可以自己行增加处理

4、测试,上传成功,但是请求图片路径报错404

原因:你没法直接请求storage,创建软连接来解决问题。
解决办法:终端项目目录下 php artisan storage:link 创建软连接

5、创建软连接报错
scandir() symlink() has been disabled for security reasons

原因:php配置文件禁用了 scandir(),symlink() 这两个函数
解决办法: 找到php.ini文件 ,找到文件中的disable_functions,在这里找到上面两个函数删除。重载php配置文件或者重启php。再次测试成功

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值