PHPExcel从aws s3读取流文件
我试图读取一些存储在AWS S3 bucket中的Excel文件,但由于一些奇怪的原因,.XLSX文件出现了问题,似乎.XLS文件本身也有问题 我在stack overflow中尝试了大多数答案,但我认为这与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
$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);
}