Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHPExcel从aws s3读取流文件_Php_Amazon Web Services_Amazon S3_Phpexcel - Fatal编程技术网

PHPExcel从aws s3读取流文件

PHPExcel从aws s3读取流文件,php,amazon-web-services,amazon-s3,phpexcel,Php,Amazon Web Services,Amazon S3,Phpexcel,我试图读取一些存储在AWS S3 bucket中的Excel文件,但由于一些奇怪的原因,.XLSX文件出现了问题,似乎.XLS文件本身也有问题 我在stack overflow中尝试了大多数答案,但我认为这与s3的流功能有关 $xls_obj = array( 'Bucket' => $attributes->report_bucket->StringValue, 'Key' => $attributes->report_key

我试图读取一些存储在AWS S3 bucket中的Excel文件,但由于一些奇怪的原因,.XLSX文件出现了问题,似乎.XLS文件本身也有问题

我在stack overflow中尝试了大多数答案,但我认为这与s3的流功能有关

$xls_obj = array(
        'Bucket' => $attributes->report_bucket->StringValue,
        'Key'    => $attributes->report_key->StringValue
      );
$s3 = S3Client::factory(awsCred());
$s3->registerStreamWrapper();
$file = 's3://'.$xls_obj['Bucket'].'/'.$xls_obj['Key'];
这将返回我可以访问的文件路径。档案。 然后将其加载到我的PHPExcel文件中。当我试图识别它时,它显示为HTML,其中as.XLS文件显示为excel5

我确实试过使用

PHPExcel_Settings::setZipClass(PHPExcel_Settings::PCLZIP);

这显然给了我

DOMDocument::loadHTML(): Invalid char in CDATA 0x3 in Entity, line: 1
因为标识的格式是HTML
我也无法让它使用S3中的公共URL。所以我需要帮助

因此,在网上阅读了大量内容后,我注意到,PHPExcel并不真正喜欢URL地址,这可能是Identify()给我HTML作为响应的原因

所以,现在我通过将文件复制到一个tmp文件,读取它,然后删除它来解决这个问题。可能不是最好的解决方案,但目前它仍然有效

如果你想知道,我就是这么做的

  $s3 = S3Client::factory(awsCred());
  $xls_obj = array(
        'Bucket' => $Bucket,
        'Key'    => $KEY,
        'SaveAs' => $path_folder."/".$fileName
  );

  $file = 's3://'.$xls_obj['Bucket'].'/'.$xls_obj['Key'];
  $s3->getObject($xls_obj); 
awsCred()是s3凭据的数组

然后我使用这个函数返回PHPExcel文件:

function fileToExcelObj($file){
  /**
   * [fileToExcelObj description]
   * @param  {s3 Object} $file
   * @return {PHPExcel Obj}
  **/

  $reader = PHPExcel_IOFactory::createReaderForFile($file);
  return $reader->load($file);

}

我收到错误-致命错误:未捕获PhpOffice\PhpSpreadsheet\Reader\Exception:无法识别此文件的读取器
function fileToExcelObj($file){
  /**
   * [fileToExcelObj description]
   * @param  {s3 Object} $file
   * @return {PHPExcel Obj}
  **/

  $reader = PHPExcel_IOFactory::createReaderForFile($file);
  return $reader->load($file);

}