IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> PHP知识库 -> Laravel6 alioss上传csv 并读取远程csv文件 -> 正文阅读

[PHP知识库]Laravel6 alioss上传csv 并读取远程csv文件

1.composer安装阿里云oss插件;

composer require johnlui/aliyun-oss:~2.0

2.app/services/OSS.php

<?php

namespace App\Services;

use JohnLui\AliyunOSS;

use Exception;
use DateTime;

class OSS {

  /* 城市名称:
   *  
   *  经典网络下可选:杭州、上海、青岛、北京、张家口、深圳、香港、硅谷、弗吉尼亚、新加坡、悉尼、日本、法兰克福、迪拜
   *  VPC 网络下可选:杭州、上海、青岛、北京、张家口、深圳、硅谷、弗吉尼亚、新加坡、悉尼、日本、法兰克福、迪拜
   */    
  private $city = '青岛';

  // 经典网络 or VPC
  private $networkType = '经典网络';
  
  private $AccessKeyId = '';
  private $AccessKeySecret = '';


  private $ossClient;

  /**
   * 私有初始化 API,非 API,不用关注
   * @param boolean 是否使用内网
   */
  public function __construct($isInternal = false)
  {
    if ($this->networkType == 'VPC' && !$isInternal) {
      throw new Exception("VPC 网络下不提供外网上传、下载等功能");
    }
    $this->ossClient = AliyunOSS::boot(
      $this->city,
      $this->networkType,
      $isInternal,
      $this->AccessKeyId,
      $this->AccessKeySecret
    );
  }


  /**
   * 使用外网上传文件
   * @param  string bucket名称
   * @param  string 上传之后的 OSS object 名称
   * @param  string 上传文件路径
   * @return boolean 上传是否成功
   */
  public static function publicUpload($bucketName, $ossKey, $filePath, $options = [])
  {
    $oss = new OSS();
    $oss->ossClient->setBucket($bucketName);
    return $oss->ossClient->uploadFile($ossKey, $filePath, $options);
  }

  /**
   * 使用阿里云内网上传文件
   * @param  string bucket名称
   * @param  string 上传之后的 OSS object 名称
   * @param  string 上传文件路径
   * @return boolean 上传是否成功
   */
  public static function privateUpload($bucketName, $ossKey, $filePath, $options = [])
  {
    $oss = new OSS(true);
    $oss->ossClient->setBucket($bucketName);
    return $oss->ossClient->uploadFile($ossKey, $filePath, $options);
  }


  /**
   * 使用外网直接上传变量内容
   * @param  string bucket名称
   * @param  string 上传之后的 OSS object 名称
   * @param  string 上传的变量
   * @return boolean 上传是否成功
   */
  public static function publicUploadContent($bucketName, $ossKey, $content, $options = [])
  {
    $oss = new OSS();
    $oss->ossClient->setBucket($bucketName);
    return $oss->ossClient->uploadContent($ossKey, $content, $options);
  }

  /**
   * 使用阿里云内网直接上传变量内容
   * @param  string bucket名称
   * @param  string 上传之后的 OSS object 名称
   * @param  string 上传的变量
   * @return boolean 上传是否成功
   */
  public static function privateUploadContent($bucketName, $ossKey, $content, $options = [])
  {
    $oss = new OSS(true);
    $oss->ossClient->setBucket($bucketName);
    return $oss->ossClient->uploadContent($ossKey, $content, $options);
  }


  /**
   * 使用外网删除文件
   * @param  string bucket名称
   * @param  string 目标 OSS object 名称
   * @return boolean 删除是否成功
   */
  public static function publicDeleteObject($bucketName, $ossKey)
  {
    $oss = new OSS();
    $oss->ossClient->setBucket($bucketName);
    return $oss->ossClient->deleteObject($bucketName, $ossKey);
  }

  /**
   * 使用阿里云内网删除文件
   * @param  string bucket名称
   * @param  string 目标 OSS object 名称
   * @return boolean 删除是否成功
   */
  public static function privateDeleteObject($bucketName, $ossKey)
  {
    $oss = new OSS(true);
    $oss->ossClient->setBucket($bucketName);
    return $oss->ossClient->deleteObject($bucketName, $ossKey);
  }


  /**
   * -------------------------------------------------
   *
   * 
   *  下面不再分公网内网出 API,也不注释了,大家自行体会吧。。。
   *
   * 
   * -------------------------------------------------
   */

  public function copyObject($sourceBuckt, $sourceKey, $destBucket, $destKey)
  {
    $oss = new OSS();
    return $oss->ossClient->copyObject($sourceBuckt, $sourceKey, $destBucket, $destKey);
  }

  public function moveObject($sourceBuckt, $sourceKey, $destBucket, $destKey)
  {
    $oss = new OSS();
    return $oss->ossClient->moveObject($sourceBuckt, $sourceKey, $destBucket, $destKey);
  }

  // 获取公开文件的 URL
  public static function getPublicObjectURL($bucketName, $ossKey)
  {
    $oss = new OSS();
    $oss->ossClient->setBucket($bucketName);
    return $oss->ossClient->getPublicUrl($ossKey);
  }
  // 获取私有文件的URL,并设定过期时间,如 \DateTime('+1 day')
  public static function getPrivateObjectURLWithExpireTime($bucketName, $ossKey, DateTime $expire_time)
  {
    $oss = new OSS();
    $oss->ossClient->setBucket($bucketName);
    return $oss->ossClient->getUrl($ossKey, $expire_time);
  }

  public static function createBucket($bucketName)
  {
    $oss = new OSS();
    return $oss->ossClient->createBucket($bucketName);
  }

  public static function getAllObjectKey($bucketName)
  {
    $oss = new OSS();
    return $oss->ossClient->getAllObjectKey($bucketName);
  }

  public static function getObjectMeta($bucketName, $ossKey)
  {
    $oss = new OSS();
    return $oss->ossClient->getObjectMeta($bucketName, $ossKey);
  }

}

3.在 composer.jsonautoload -> classmap 处增加配置(composer.json在lavarel项目的根目录下):

"autoload": {
    "classmap": [
      "app/services"
    ]
  }

4.运行命令(注意切换到项目根目录):

composer dump-autoload

5.应用(比如在控制器里边应用):

<?php
namespace App\Http\Controllers;
/*....省略其他命名空间的引用*/
use App\Services\OSS;

class TestController extends Controller
{
    public function __construct()
    {
        
        parent::__construct();
    }


    /**
     *
     * csv 读取
     */
    public function opt(Request $request){
        ini_set('memory_limit','1024M');    // 临时设置最大内存占用为3G
        set_time_limit(0);   // 设置脚本最大执行时间 为0 永不过期
        $ex = $_FILES['file'];
        if ($ex['error']) {
            return back()->with('error', '未提交文件。请选择要导入的文件,然后重试');
        }
        try {
            $bucket = "bucket_name";
            $filename = time() . substr($ex['name'], stripos($ex['name'], '.'));
            $alios =  OSS::publicUpload($bucket, $filename, $ex['tmp_name']);
            if(!$alios){
                //错误处理
		exit("err1");
				
            }
            $path =  OSS::getPublicObjectURL($bucket,$filename);
            if(!$path){
               //错误处理
	        exit("err2");
            }
            $data = $this->read_csv($path);
	    print_r($data);
            
    }

	/**
	*读取csv内容
        *代码来源地址:https://www.jb51.net/article/104814.htm
	*
	*/
    function read_csv($cvs) {
        $shuang = false;
        $str = file_get_contents($cvs);
        $str = iconv('gbk', 'utf-8', $str);
        for ($i=0;$i<strlen($str);$i++) {
            if($str{$i}=='"') {
                if($shuang) {
                    if($str{$i+1}=='"') {
                        $str{$i} = '*';
                        $str{$i+1} = '*';
                    } else {
                        $shuang = false;
                    }
                } else {
                    $shuang = true;
                }
            }
            if($str{$i}==',') {
                if($shuang) {
                } else {
                    $str{$i} = '|';
                }
            }
            if($str{$i}=="\n") {
                if($shuang) {
                    $str{$i} = '^';
                } else {
                }
            }
        }
        $str = str_replace(array('"','*'),array('','"'),$str);
        $a1 = explode("\n",$str);
        $array = array();
        foreach($a1 as $k=>$value) {
            if($value) {
                $value = str_replace("^","\n",$value);
                $array[$k] = explode("|",$value);
            }
        }
        return $array;
    }
}

  PHP知识库 最新文章
Laravel 下实现 Google 2fa 验证
UUCTF WP
DASCTF10月 web
XAMPP任意命令执行提升权限漏洞(CVE-2020-
[GYCTF2020]Easyphp
iwebsec靶场 代码执行关卡通关笔记
多个线程同步执行,多个线程依次执行,多个
php 没事记录下常用方法 (TP5.1)
php之jwt
2021-09-18
上一篇文章      下一篇文章      查看所有文章
加:2021-07-16 10:58:33  更:2021-07-16 11:01:52 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年4日历 -2024/4/27 17:46:55-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码