我将数组转换为 csv,然后在尝试将其上传到 s3 时出现错误

I converted an array into csv, then I get an error when I try to upload it to s3

基本上我想做的是将我的数组转换为 csv 文件,然后将其上传到 amazon s3...下面是制作 csv 文件并将其上传到 s3 的代码...

$output = [...] // This is my array

$file = fopen("C:\Users\User\Desktop\myFile.csv", "w");

foreach ($output as $row) {
    fputcsv($file, $row);
}

fclose($file);

$path = Storage::disk('s3')->put("/hello.csv", $file, [
    'visibility' => 'public',
    'mimetype' => 'text/csv'
]);

问题是,如果我尝试在桌面上打开创建的 csv 文件,它会完美运行。

我得到的错误是:

mb_strlen() expects parameter 1 to be string, resource given

put方法中的"visibility"和"mimetype"是我在网上找的,但即使没有它,还是报同样的错误...

此外,根据 laravel 文档,put 方法支持 PHP 资源:

The put method may be used to store file contents on a disk. You may also pass a PHP resource to the put method, which will use Flysystem's underlying stream support.

在上传到 S3 之前,您是否将 CSV 存储在本地(临时)?如果是这样,可能是路径问题?

如果不是路径问题,我会尝试使用现有的 CSV 文件上传。看看这是否有效,然后您可以将代码的上传部分作为问题消除。

我现在在学长的帮助下搞定了...基本上你需要将文件名和文件目录放在 put() 方法中,如果你使用 putFileAs()

$output = [...] // This is my array

$filename = "C:\Users\User\Desktop\myFile.csv";
$file = fopen($filename, "w");

foreach ($output as $row) {
    fputcsv($file, $row);
}

fclose($file);

$path = Storage::disk('s3')->put("/hello.csv", $filename, [
    'visibility' => 'public',
    'mimetype' => 'text/csv'
]);