Laravel 5.2的s3驱动程序出现问题。我得到的错误是:
Found 1 error while validating the input provided for the HeadObject operation:
[Key] must be at least 1 characters long. Value provided is 0 characters long.
我正在使用Laravel文档中所述的联盟flysystem V3。当我按照堆栈跟踪并开始转储变量时,“Key”值始终为空,但我已将其全部设置在配置文件中。
以下是我的堆栈跟踪的顶行
in Validator.php line 38
at Validator->validate('HeadObject', object(StructureShape), array('Bucket' => 'monstervsl', 'Key' => '', '@http' => array())) in Middleware.php line 77
at Middleware::Aws\{closure}(object(Command), null) in S3Client.php line 710
at S3Client::Aws\S3\{closure}(object(Command), null) in S3Client.php line 729
at S3Client::Aws\S3\{closure}(object(Command), null) in Middleware.php line 53
at Middleware::Aws\{closure}(object(Command), null) in SSECMiddleware.php line 59
at SSECMiddleware->__invoke(object(Command)) in AwsClient.php line 208
正如你所看到的那样,它从我的配置中获取了存储桶而不是它的空键。
这是我的filesystem.php
文件
's3' => [
'driver' => 's3',
// 'key' => env('S3_KEY'),
// 'secret' => env('S3_SECRET'),
'key' => '8tfnxo8abgn7voaex8rgv', // <- Not my real key
'secret' => 'aw7btx49wXNF7AGWV', // <- not my real secret
'region' => 'eu-west-1',
'bucket' => 'monstervsl',
],
这是我的控制器,它是相当直接的,我不认为放置内容的东西是相关的,但无论如何添加它
// Write the contents to a new file on disk
$view = view('iframe')->with('json', $video->toJson());
$contents = $view->render();
$token = '12345';
$filePath = public_path() .'/iframes/' . $token . '.html';
file_put_contents($filePath, $contents);
Storage::disk('s3')->put('/', file_get_contents($filePath));
答案 0 :(得分:2)
您必须将要保存此文件的目标文件路径/名称作为put
函数的第一个参数提供给S3存储桶。目前您正在尝试将文件保存在存储桶的根目录中,而不使用任何名称。尝试这样的事情:
Storage::disk('s3')->put('filename.html', file_get_contents($filePath));
此文件的完整路径是此上下文中的键&amp;这就是原始请求中缺少的内容。