CI框架文件上传+多文件上传+文件下载

代码中的logMessage()和Directory()是自己封装的记录日志和递归创建文件夹助手函数

注意修改!!!

点击查看:Directory()    logMessage()

<?php
/**
 * Created by PhpStorm.
 * User: 123
 * Date: 2018/9/13
 * Time: 14:56
 */

class Images
{
    private $CI_instance;
    public function __construct()
    {
        $this->CI_instance =& get_instance();
    }

    /**
	 * 文件上传
	 */
	public function upload($name = '')
	{
	    //修改文件之前先删除原来的图片
	    $post = $this->CI_instance->input->post();
        if (isset($post[$name]) && !empty($post[$name]) && !is_dir($post[$name]) && file_exists($post[$name])){
            unlink($post[$name]);
        }
		//获取文件的大小
		$file_size = $_FILES[$name]['size'];
		if($file_size > (2 * 1024 * 1024)) {
			logMessage('error' , '文件上传失败!name='.$name.'错误原因:文件大于2M size='.$file_size);
			return false;
		}

		//判断是否上传成功(是否使用post方式上传)
		if(!is_uploaded_file($_FILES[$name]['tmp_name'])) {
            logMessage('error' , '文件上传失败!name='.$name.'错误信息:文件没有传进来');
            return false;
        }

        $move_to_file = $this->filePath($_FILES[$name]['name']);
        //判断移动成功还是失败
        if(!move_uploaded_file($_FILES[$name]['tmp_name'],iconv("utf-8","gb2312",$move_to_file))) {
            logMessage('error' , '文件上传失败!name='.$name.'错误原因:文件移动失败!');
            return false;
        }
        return $this->databasesPath($move_to_file);
	}
	
    /**
     * 多文件上传
     */
    public function uploads($name) {
        //获取文件的大小
        foreach ($_FILES[$name]['size'] as $size_key => $size_val){
            if($size_val > (2 * 1024 * 1024)) {
                logMessage('error' , '文件上传失败!name='.$name.'错误原因:key='.$size_key.'文件大于2M size='.$size_val);
                return false;
            }
        }
        $data = array();
        for ($i = 0 ; $i < count($_FILES[$name]['tmp_name']) ; $i++){
            $uploaded = is_uploaded_file($_FILES[$name]['tmp_name'][$i]);
            //判断是否上传成功(是否使用post方式上传)
            if($uploaded) {
                $move_to_file = $this->filePath($_FILES[$name]['name'][$i]);
                if(move_uploaded_file($_FILES[$name]['tmp_name'][$i],iconv("utf-8","gb2312",$move_to_file))) {
                    $data[] = $this->databasesPath($move_to_file);
                } else {
                    //文件上传失败
                    continue;
                }
            } else {
                //文件没有穿进来
                continue;
            }
        }
        return $data;
    }

    /**
     * 下载文件
     * @param $uploaded_file
     * @return bool|string
     */
    public function downloadFile($file_path_tmp){
        if (!isset($file_path_tmp) || empty($file_path_tmp))return false;

        // curl下载文件
        $ch = curl_init();
        $timeout = 5;
        curl_setopt($ch, CURLOPT_URL, $file_path_tmp);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
        $file_info = curl_exec($ch);
        if (!$file_info){
            logMessage('error' , '下载失败!'.curl_error());
        }
        curl_close($ch);

        $file_path = $this->filePath($file_path_tmp);
        if (!file_put_contents($file_path ,$file_info)){
            return false;
        }
        return $this->databasesPath($file_path);
    }

    /**
     * 截取数据库存储路径
     * @param $file_path
     * @return bool|string
     */
    public function databasesPath($file_path){
        return substr($file_path , strpos($file_path , 'uploads'));
    }

    /**
     * 生成文件存储路径
     * @return bool
     */
    public function generatedDirectory(){
        $file_dir = str_replace('\\','/',FCPATH).'uploads/'.date('Y/m/d');
        Directory($file_dir);
        return $file_dir;
    }

    /**
     * 文件路径
     * @param $file_path
     * @return string
     */
    public function filePath($file_path){
        $file_name = uniqid();//图片名称
        return $this->generatedDirectory().'/'.$file_name.$this->fileSuffix($file_path);
    }

    /**
     * 获取文件尾缀
     * @param $file_path
     * @return bool|string
     */
    public function fileSuffix($file_path){
        $directory_suffix = substr($file_path , strrpos($file_path , '.'));
        $arr = array('.jpg','.png','.jpeg','.gif','.mp4');
        if (!in_array($directory_suffix,$arr)){
            $directory_suffix = '.jpg';
        }
        return $directory_suffix;
    }
}

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值