codecamp

基于PhalApi的图片上传拓展 (由@Summer)

基于PhalApi的图片上传拓展

1.安装和配置

1.1 扩展包下载

从 PhalApi-Library 扩展库中下载获取 UCloud 扩展包,如使用:

git clone https://git.oschina.net/dogstar/PhalApi-Library.git
然后把 UCloud 目录复制到 ./PhalApi/Library/ 下,即:

cp ./PhalApi-Library/UCloud/ ./PhalApi/Library/ -R
到处安装完毕!接下是插件的配置。

1.2 扩展包配置

我们需要在 ./Config/app.php 配置文件中追加以下配置:

1.2.1 本地上传配置
    /**
     * 云上传引擎,支持local,oss,upyun
     */
    'UCloudEngine' => 'local',

    /**
     * 本地存储相关配置(UCloudEngine为local时的配置)
     */
    'UCloud' => array(
        //对应的文件路径
        'host' => 'http://localhost/PhalApi/Public/upload' 
    ),

对应的文件路径也可以独立绑定一个二级域名,然后绑定至upload目录,调用的图片将显示为http://image.xxx.com/项目名/文件名.jpg

再提一句,可能有些同学搞不懂对应文件路径,这里的upload路径会在Public中自动生成

1.2.2 云图片上传配置
    /**
     * 云上传引擎,支持local,oss,upyun
     */
    'UCloudEngine' => 'oss',

    /**
     * 云上传对应引擎相关配置
     * 如果UCloudEngine不为local,则需要按以下配置
     */
    'UCloud' => array(
        //上传的API地址,不带http://,以下api为阿里云OSS杭州节点
        'api' => 'oss-cn-hangzhou.aliyuncs.com',

        //统一的key
        'accessKey' => '',
        'secretKey' => '',

        //自定义配置的空间
        'bucket' => '',
        'host' => 'http://image.xxx.com', //必带http:// 末尾不带/

        'timeout' => 90
    ),

2.入门使用

2.1 入口注册

$loader->addDirs('Library');

//其他代码...

//云存储
DI()->ucloud = new UCloud_Lite();

3.示例:图片上传

先简单写个测试文件:

<html>
    <form method="POST" action="./?service=Upload.upload" enctype="multipart/form-data">
        <input type="file" name="file">
        <input type="submit">
    </form>
</html>

3.1 文件上传接口

<?php
/*
 * +----------------------------------------------------------------------
 * | 上传接口
 * +----------------------------------------------------------------------
 * | Copyright (c) 2015 summer All rights reserved.
 * +----------------------------------------------------------------------
 * | Author: summer <aer_c@qq.com> <qq7579476>
 * +----------------------------------------------------------------------
 * | This is not a free software, unauthorized no use and dissemination.
 * +----------------------------------------------------------------------
 * | Date
 * +----------------------------------------------------------------------
 */


class Api_Upload extends PhalApi_Api {

    /**
     * 获取参数
     * @return array 参数信息
     */
    public function getRules() {
        return array(
            'upload' => array(
                'file' => array(
                    'name' => 'file', 
                    'type' => 'file', 
                    'min' => 0, 
                    'max' => 1024 * 1024, 
                    'range' => array('image/jpg', 'image/jpeg', 'image/png'), 
                    'ext' => array('jpg', 'jpeg', 'png')
                ),
            ),
        );
    }

    /**
     * 上传文件
     * @return string $url 绝对路径
     * @return string $file 相对路径,用于保存至数据库,按项目情况自己决定吧
     */
    public function upload() {

        //设置上传路径 设置方法参考3.2
        DI()->ucloud->set('save_path',date('Y/m/d'));

        //新增修改文件名设置上传的文件名称
        DI()->ucloud->set('file_name', 'avatar');

        //上传表单名
        $res = DI()->ucloud->upfile($this->file);

        return $rs;
    }
}
?>

3.2 设置上传路径

按照以上设置,将会自动生成4层目录(demo/2015/13/7/aaa.jpg),demo其实为项目名称,你可以在每个项目入口设置一个常量等于项目名称,然后打开拓展library/UCloud/Lite.php找到$default_path,将该值设置为你设定的常量,或者为空(不是NULL),为空后你可以在设置上传路径里面设置(项目名/2015/12/07)也是可以的!

基于PhalApi的Redis拓展 (由@喵了个咪提供)
基于PhalApi的第三方支付拓展 (由@Summer)
温馨提示
下载编程狮App,免费阅读超1000+编程语言教程
取消
确定
目录

八、视频教程

关闭

MIP.setData({ 'pageTheme' : getCookie('pageTheme') || {'day':true, 'night':false}, 'pageFontSize' : getCookie('pageFontSize') || 20 }); MIP.watch('pageTheme', function(newValue){ setCookie('pageTheme', JSON.stringify(newValue)) }); MIP.watch('pageFontSize', function(newValue){ setCookie('pageFontSize', newValue) }); function setCookie(name, value){ var days = 1; var exp = new Date(); exp.setTime(exp.getTime() + days*24*60*60*1000); document.cookie = name + '=' + value + ';expires=' + exp.toUTCString(); } function getCookie(name){ var reg = new RegExp('(^| )' + name + '=([^;]*)(;|$)'); return document.cookie.match(reg) ? JSON.parse(document.cookie.match(reg)[2]) : null; }