我有一个csv文件,该文件已在S3服务器中上传。我想知道我怎么可以加载或读取从S3?
下载的文件数据代码
$path = Input::get('filename');
$s3 = new S3Client(Config::get('image'));
$result = $s3->getObject(array(
'Bucket' => Config::get('image.bucket'),
'Key' => Config::get('node.subdomain') . '/upload/' . $path,
));
$r = fopen($result['Body'], 'a');
Debugbar::addMessage($result,"download");
现在我得到failed to open stream: Invalid argument
答案 0 :(得分:0)
您可以将文件保存在本地,然后使用以下内容阅读文件:
library(aws.s3)
library(tidyverse)
data <-
save_object("s3://myBucketName/directoryName/fileName.csv") %>%
fread()
如果您不想用加载的每个csv的副本填充工作目录,那么这是一个更好的选择:
data <-
save_object("s3://myBucketName/directoryName/fileName.csv",
file = tempfile(fileext = ".csv")
) %>%
fread()
如果您对临时文件的位置感到好奇,那么Sys.getenv()
可以提供一些见识-请参见TMPDIR
TEMP
或TMP
。可以在the Base R tempfile docs.中找到更多信息。
答案 1 :(得分:0)
有两部戏。
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'),
]
...]
...
然后,您可以在项目的其他地方使用类似的东西。
$csv = \Illuminate\Support\Facades\Storage::disk('s3')->get('myDataFile.csv');
foreach(preg_split("/((\r?\n)|(\r\n?))/", $csv) as $line){
$data = str_getcsv($line);
...
}