0

我正在使用 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 方法时,删除工作正常。

4

0 回答 0