我已经搜索过这个问题。但是每个问题/博客的任务都不同。所以这些答案或解决方案与我无关。
首先,这里是我的任务详情。
用户在请求中上传 CSV 文件。我正在使用 laravel 的文件系统(本地驱动程序)存储该文件。
$path = $request->file('csv_file')->storeAs('requests/' . $userRequest->id, 'input.csv');
这样 CSV 文件将存储为storage/app/requests/{$userRequest->id}/input.csv
. 我检查了requests
目录的所有者,它是www-data
.
现在我在 cronjobs 中设置了一些工匠命令来处理用户请求。我必须将进程的输出存储在该请求目录中,即storage/app/requests/{$userRequest->id}/output/output_1.csv
.
$file = 'requests/' . $userRequest->id . '/output/' . $outputfilename . '.csv';
\Storage::put($file, $content);
但是在创建输出文件时,它会抛出错误
无法创建根目录
我知道原因。这是因为运行工匠命令的所有者。Artisan 命令由另一个用户 ( akshay
) 运行,而requests
目录由 www-data 创建。
因此,根据我的说法,这里有可能解决此问题的方法。
- 由 www-data 用户运行 artisan 命令。
- 创建请求目录并以用户
akshay
为所有者上传文件。
许多用户建议更改目录的所有者。例如,这个。但正如我们所见,在我的例子中,目录的创建是完全动态的。所以我不能那样做。但我不知道如何用 laravel 做上述任何事情。
我更喜欢选项(2),因为用户只会完成“请求文件上传” www-data
。所有其他执行将由akshay
用户完成。例如,我只需要上传一次文件。但是我必须将流程输出存储 500 次。
如果有人知道答案,将不胜感激。