【问题标题】:PHPExcel Reading streamed files from aws s3PHPExcel 从 aws s3 读取流文件
【发布时间】:2018-03-31 15:14:36
【问题描述】:

我正在尝试读取存储在 AWS S3 存储桶中的一些 Excel 文件,但由于某些奇怪的原因,我遇到了 .XLSX 文件的问题,并且似乎 .XLS 文件的行为本身。

我在堆栈溢出中尝试了大多数答案,但我认为这与 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,而 .XLS 文件显示为 excel5。

我确实尝试过使用

PHPExcel_Settings::setZipClass(PHPExcel_Settings::PCLZIP);

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

这显然给了我

DOMDocument::loadHTML(): Invalid char in CDATA 0x3 in Entity, line: 1

因为识别的格式是 HTML 我无法让它与来自 S3 的 PUBLIC URL 一起工作。所以我需要帮助!

【问题讨论】:

    标签: php amazon-web-services amazon-s3 phpexcel


    【解决方案1】:

    所以在网上大量阅读之后,我注意到,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:无法识别此文件的阅读器
    猜你喜欢
    • 1970-01-01
    • 2015-08-30
    • 2019-10-27
    • 1970-01-01
    • 2018-08-19
    • 2018-08-22
    • 2019-05-15
    • 1970-01-01
    • 2020-11-07
    相关资源
    最近更新 更多