Php 在Laravel中读取S3中的csv?
我有一个csv文件已经上传到S3服务器。我可以知道如何加载或读取从S3下载的文件数据吗 代码Php 在Laravel中读取S3中的csv?,php,amazon-s3,laravel-4,Php,Amazon S3,Laravel 4,我有一个csv文件已经上传到S3服务器。我可以知道如何加载或读取从S3下载的文件数据吗 代码 现在我发现无法打开流:无效参数您可以在本地保存文件,然后使用以下命令将其读入: library(aws.s3) # to connect to s3 buckets library(tidyverse) # for the pipes library(data.table) # for the fread() data <- save_object("s3://myBucketN
现在我发现
无法打开流:无效参数您可以在本地保存文件,然后使用以下命令将其读入:
library(aws.s3) # to connect to s3 buckets
library(tidyverse) # for the pipes
library(data.table) # for the fread()
data <-
save_object("s3://myBucketName/directoryName/fileName.csv") %>%
fread()
library(aws.s3)#连接到s3存储桶
图书馆(tidyverse)#用于管道
库(data.table)#用于fread()
数据%
fread()
如果您不想用加载的每个csv的副本填充工作目录,那么这是一个更好的选择:
data <-
save_object("s3://myBucketName/directoryName/fileName.csv",
file = tempfile(fileext = ".csv")
) %>%
fread()
数据%
fread()
如果您对TEMP文件的位置感到好奇,那么Sys.getenv()
可以提供一些见解-请参阅TMPDIR
TEMP
或TMP
。更多信息可以在中找到。有两个方面在起作用
您的项目文件系统配置
解析csv的行
PROJECT/config/filesystems.php
<?php return [...
'disks' => [
...
'myS3drive' => [
'driver' => 's3',
'key' => env('AWS_ACCESS_KEY_ID'),
'secret' => env('AWS_SECRET_ACCESS_KEY'),
'region' => env('AWS_DEFAULT_REGION'),
'bucket' => env('AWS_BUCKET'),
]
...]
...
fopen(路径
应为fopen($path
我不知道您是否能够将其附加到bucket中,但我想您需要的是,我在阅读了AWS s3文档后更新了我的代码,该文档介绍了如何从s3获取对象。现在我从s3检索了一个对象列表,但我不确定如何加载它。您获取的是对象,而不是流。请尝试:$csv=(字符串)$result['Body']
;…ps,您可以从S3客户端获取流,如果您坚持,请查找它。@YvesLeBorg您可以提供一个从S3客户端获取流的示例吗?我认为从S3获取更大文件将是一个解决方案。
<?php return [...
'disks' => [
...
'myS3drive' => [
'driver' => 's3',
'key' => env('AWS_ACCESS_KEY_ID'),
'secret' => env('AWS_SECRET_ACCESS_KEY'),
'region' => env('AWS_DEFAULT_REGION'),
'bucket' => env('AWS_BUCKET'),
]
...]
...
$csv = \Illuminate\Support\Facades\Storage::disk('s3')->get('myDataFile.csv');
foreach(preg_split("/((\r?\n)|(\r\n?))/", $csv) as $line){
$data = str_getcsv($line);
...
}