code: public function read($path, $saveHandler = null, $params = array())
      {
          $req = new Rest($this->config);
          $response = $req->request('GET', $path)
              ->withHeaders($params)
              ->send();
  
  
          $params = Util::getHeaderParams($response->getHeaders());
  
  
          if (! isset($params['x-upyun-list-iter'])) {
              if (is_resource($saveHandler)) {
                  Psr7\copy_to_stream($response->getBody(), Psr7\stream_for($saveHandler));
                  return true;
              } else {
                  return $response->getBody()->getContents();
              }
          } else {
              $files = Util::parseDir($response->getBody()->getContents());
              return array('files' => $files, 'is_end' => $params['x-upyun-list-iter'] === 'g2gCZAAEbmV4dGQAA2VvZg', 'iter' => $params['x-upyun-list-iter']);
          }
      }
docs: 读取云存储文件/目录内容
  
  @param string $path 又拍云存储中的文件或者目录路径
  @param resource $saveHandler 文件内容写入本地文件流。例如 `$saveHandler = fopen('/local/file', 'w')
  `。当设置该参数时，将以文件流的方式，直接将又拍云中的文件写入本地的文件流，或其他可以写入的流
  @param array $params  可选参数，读取目录内容时，需要设置三个参数： `X-List-Iter` 分页开始位置（第一页不需要设置），`X-List-Limit` 获取的文件数量（默认 100，最大
  10000），`X-List-Order` 结果以时间正序或者倒序
  
  @return mixed $return 当读取文件且没有设置 `$saveHandler` 参数时，返回一个字符串类型，表示文件内容；设置了 `$saveHandler` 参数时，返回布尔值
  `true`。当读取目录时，返回一个数组，表示目录下的文件列表。目录下文件内容过多时，需要通过判断返回数组中的 `is_end` 属性，进行分页读取内容
  
  @throws \Exception