我正在使用 League\Flysystem 在 Amazon S3 上上传文件。上传文件后,我想从服务器中删除文件。起初我使用的是 read 和 write 方法,然后是 delete 方法,它工作得很好。由于我有大文件,使用读取方法不是一个好的解决方案,因为它分配了大量的内存。现在我正在使用 readStream 和 writeStream,但是当 writeStream 完成时,我关闭流并且 delete 方法返回 false。我也尝试使用取消链接,但该文件仍未删除。看起来该文件已被另一个进程使用,但我不确定如何释放它。这是一个代码示例:
$client = S3Client::factory([
'credentials' => [
'key' => AWS_ACCESS_KEY,
'secret' => AWS_SECRET_KEY,
],
'region' => 'eu-west-1',
'version' => '2006-03-01',
]);
$s3 = new AwsS3Adapter($client, AWS_BUCKET);
$local = new Filesystem(new Adapter($localFolder));
$config = new Config();
$config->set("visibility", "private");
$readStream = $local->readStream($fileName);
$writeStream = $s3->writeStream($file, $readStream, $config);
if (is_resource($readStream))
{
fclose($readStream);
}
if (is_resource($writeStream))
{
fclose($writeStream);
}
$local->delete($fileName);
我也试过这个,没有运气:
$local = new Filesystem(new Adapter($localFolder), 0);
我不得不再次提到,当使用 read 和 write 方法时,删除工作正常。