yangkangwei cbf378a57b first 1 سال پیش
..
config cbf378a57b first 1 سال پیش
database cbf378a57b first 1 سال پیش
model cbf378a57b first 1 سال پیش
src cbf378a57b first 1 سال پیش
.gitignore cbf378a57b first 1 سال پیش
README.md cbf378a57b first 1 سال پیش

README.md

laravel-upload-manager

通过API对文件进行“上传、验证、储存、管理”操作。 Upload, validate, storage, manage by API for Laravel 5.x/6.x

依赖 Requirement

  1. Laravel >= 5.1

安装 Install

  1. composer require zgldh/laravel-upload-manager
  2. 3. php artisan vendor:publish --provider="zgldh\UploadManager\UploadManagerServiceProvider"
    4. php artisan migrate
    5. Done
    
    ## 用法 Usage
    
    1. 上传一个文件 Upload and store a file.
        
    

    php

    use zgldh\UploadManager\UploadManager;
    
    class UploadController extend Controller
    {
        public function postUpload(Request $request)
        {
            $file = $request->file('avatar');
            $manager = UploadManager::getInstance();
            $upload = $manager->upload($file);
            $upload->save();
            return $upload;
        }
    }
    
     
    2. 从一个URL获取并保存文件 Fetch and store a file from a URL
        
    

    php

    use zgldh\UploadManager\UploadManager;
    
    class UploadController extend Controller
    {
        public function postUpload(Request $request)
        {
            $fileUrl = $request->input('url');
            $manager = UploadManager::getInstance();
            $upload = $manager->upload($fileUrl);
            $upload->save();
            return $upload;
        }
    }
    
     
    3. 更新一个上传对象 Update a upload object
        
    

    php

    use App\Upload;
    use zgldh\UploadManager\UploadManager;
    
    class UploadController extend Controller
    {
        public function postUpload(Request $request)
        {
            $uploadId = $request->input('id');
            $file = $request->file('avatar');
    
            $manager = UploadManager::getInstance();
            $upload = Upload::find($uploadId);
            if($manager->update($upload, $file))
            {
                $upload->save();
                return $upload;
            }
            return ['result'=>false];
        }
    }
    
     
    4. 用从一个URL获取到的文件来更新一个上传对象 Update a upload object from a URL
        
    

    php

    use App\Upload;
    use zgldh\UploadManager\UploadManager;
    
    class UploadController extend Controller
    {
        public function postUpload(Request $request)
        {
            $uploadId = $request->input('id');
            $fileUrl = $request->input('url');
    
            $manager = UploadManager::getInstance();
            $upload = Upload::find($uploadId);
            if($manager->update($upload, $fileUrl))
            {
                $upload->save();
                return $upload;
            }
            return ['result'=>false];
        }
    }
    
        
    5. 数据验证 Validation
        
    

    php

    use zgldh\UploadManager\UploadManager;
    
    class UploadController extend Controller
    {
        public function postUpload(Request $request)
        {
            $file = $request->file('avatar');
            $manager = UploadManager::getInstance();
            $upload = $manager->withValidator('image')->upload($file);    //加上验证组
    
            if($upload)
            {
                $upload->save();
                return $upload;
            }
            else
            {
                $errorMessages = $manager->getErrors();                   //得到所有错误信息
                $errorMessage = $manager->getFirstErrorMessage();         //得到第一条错误信息
                throw new \Exception($errorMessage);
            }
        }
    }
    
        
    6. 存到别的Disk里面 
        
    

    php

    use zgldh\UploadManager\UploadManager;
    
    class UploadController extend Controller
    {
        public function postUpload(Request $request)
        {
            $file = $request->file('avatar');
            $manager = UploadManager::getInstance();
            $upload = $manager
                ->withValidator('image')
                ->withDisk('qiniu')         // 储存到七牛磁盘里
                ->upload($file);
            $upload->save();
            return $upload;
        }
    }
    
        
    7. 上传前修改``` $upload ``` 对象
        
    

    php

    use zgldh\UploadManager\UploadManager;
    
    class UploadController extend Controller
    {
        public function postUpload(Request $request)
        {
            $file = $request->file('avatar');
            $manager = UploadManager::getInstance();
            $upload = $manager
                ->withValidator('image')
                ->withDisk('localhost')         // 默认存到本地
                ->upload($file, function($upload){
                    if($upload->size > 1024*1024)
                    {
                        $upload->disk = 'qiniu';// 超过1兆的文件都放到七牛里。
                    }
                    return $upload;
                });
            $upload->save();
            return $upload;
        }
    }
    
    
    8. 删除某用户上传后,却一直没有使用的`avatar`类型的``` $upload ``` 对象
    
    

    php

    use zgldh\UploadManager\UploadManager;
    
    class UploadController extend Controller
    {
        public function clearUnUsed(Request $request)
        {
            $currentUser = $request->user();
            $manager = UploadManager::getInstance();
            $manager->removeUnUsedUploads($currentUser, 'avatar');
        }
    }
    
    
    ## 配置 Configuration
    
    1. ``` config/upload.php ```
    
    请查看源文件注释
    
    2. ``` App\Upload ```
    
    可以在里面写自己喜欢的函数
        
    3. ``` UploadStrategy.php ```
    
    通常需要你亲自扩展一个出来。如:
        
    

    php

    <?php namespace App\Extensions;
    
    use zgldh\UploadManager\UploadStrategy as BaseUploadStrategy;
    use zgldh\UploadManager\UploadStrategyInterface;
    
    class UploadStrategy extends BaseUploadStrategy implements UploadStrategyInterface
    {
    
        /**
         * 生成储存的相对路径
         * @param $filename
         * @return string
         */
        public function makeStorePath($filename)
        {
            $path = 'i/' . $filename;
            return $path;
        }
    
        /**
         * 得到 disk localuploads 内上传的文件的URL
         * @param $path
         * @return string
         */
        public function getLocaluploadsUrl($path)
        {
            $url = url('uploads/' . $path);
            return $url;
        }
    
        /**
         * 得到 disk qiniu 内上传的文件的URL
         * @param $path
         * @return string
         */
        public function getQiniuUrl($path)
        {
            $url = 'http://' . trim(\Config::get('filesystems.disks.qiniu.domain'), '/') . '/' . trim($path, '/');
            return $url;
        }
    } 
    

    ```

    然后在 config/upload.php 里面配置 upload_strategy 为你自己扩展的类即可。

    待续