laravel - 使用 AWS Lambda 中托管的 Laravel 导入 Excel 时出现错误“touch():无法创建文件,因为只读文件系统
问题描述
我正在尝试在 Laravel 中导入一个托管在 AWS Lambda 中的 excel 工作表,但出现错误
touch(): Unable to create file /var/task/storage/framework/laravel-excel/laravel-excel-ToQHNqV18ybdHCmqQFJKidLr5dSsWSUe.xlsx because Read-only file system
我要导入的代码是
Excel::toArray(new ClientCompanyImport, $request->file('sales_accounts_sheet'));
然后我尝试将光盘名称作为第三个参数提及为
Excel::toArray(new ClientCompanyImport, 'mysheet.xlsx', 's3');
并将 s3 存储桶路径中的“mysheet.xlsx”文件上传为“storage/frameworks/laravel-excel/mysheet.xlsx”
我仍然遇到同样的错误。正如我正确理解的那样,在此更改之后,系统正在从 S3 位置获取文件,但仍试图将文件临时保存在默认位置,即在 Lambda 中是只读的。
Laravel 版本:8 Laravel-Excel:3.1
解决方案
在阅读了很多文章和论坛后,我找到了解决方案。
上述错误的主要原因是由于 AWS Lambda 的只读模式。默认情况下,excel 会尝试在根文件夹中上传,在 Lambda 的情况下它是只读的,它会失败。
Lambda 支持的唯一可编辑路径是 /tmp
解决方法是在config/excel.php中指定路径
return [
'temporary_files' => [
'local_path' => sys_get_temp_dir(),
],
.
.
推荐阅读
- python - Pandas 通过多个字符串分隔符将列拆分为多列
- typescript - 在类型化的字符串文字中强制使用后缀
- ruby - Nokogiri:解析和更新 Plist 中的值
- php - LDAP:无法添加 CN 不包含名字和姓氏的用户
- laravel - Laravel job 工作命令不像以前那样工作
- css - 在 css 文件中导入的 css 文件序列
- git - 在 azure vm 上部署
- hadoop - flink-sql 如何处理'count(distinct)'这样的场景
- angular - 轮询服务,直到我得到响应或在特定时间段后超时
- c++ - 在以下代码中返回对/结构/元组时的参数顺序是否重要?