cyt*_*nny 13 php amazon-s3 amazon-web-services laravel laravel-5
我正在使用正式的PHP SDK与laravel的官方服务提供商将图像上传到Amazon S3.图像暂时存储在我的服务器上,上传后应删除.以下是我用来上传和删除的代码.
$temp_path = "/screenshot_temp/testing.png";
$client = AWS::createClient('s3');
$result = $client->putObject(array(
'Bucket' => self::$bucketName,
'Key' => 'screenshot/testing.png',
'SourceFile' => $temp_path,
'ACL' => 'public-read'
));
);
chown($temp_path, 777);
unlink($temp_path);
Run Code Online (Sandbox Code Playgroud)
上传成功.我可以通过链接返回看到我的图像,我可以在亚马逊控制台上看到它.问题是删除失败,并显示以下错误消息:
ErrorException: unlink(... path of my file ...): Permission denied
Run Code Online (Sandbox Code Playgroud)
我确信我的文件权限设置是正确的,我可以删除我的文件与代码部分上传到S3注释.所以应该是在上传文件期间文件被锁定的问题.有没有办法解锁和删除我的文件?
是的,流上传锁定文件,直到它完成,尝试2,
$client = AWS::createClient('s3');
$fileContent = file_get_contents($temp_path);
$result = $client->putObject(array(
'Bucket' => self::$bucketName,
'Key' => 'screenshot/testing.png',
'Body' => $fileContent,
'ACL' => 'public-read'
));
);
unlink($temp_path);
Run Code Online (Sandbox Code Playgroud)
要么
$client = AWS::createClient('s3');
$fileContent = file_get_contents($temp_path);
$result = $client->putObject(array(
'Bucket' => self::$bucketName,
'Key' => 'screenshot/testing.png',
'Body' => $fileContent,
'ACL' => 'public-read'
));
);
gc_collect_cycles();
unlink($temp_path);
Run Code Online (Sandbox Code Playgroud)
SourceFile在putObjectS3Client上使用选项时,会打开一个文件,但在操作后不会关闭它。
在大多数情况下,您只能取消设置$client和/或$result关闭打开的文件。但不幸的是在这种情况下不是这样。
使用Body选项代替SourceFile。
// temp file
$file = fopen($temp_path, "r");
// use resource, not a path
$result = $client->putObject(array(
'Bucket' => self::$bucketName,
'Key' => 'screenshot/testing.png',
'Body' => $file,
'ACL' => 'public-read'
));
);
fclose($file);
unlink($temp_path);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1520 次 |
| 最近记录: |