Я использую League \ Flysystem для загрузки файлов на Amazon S3. После загрузки файла я хочу удалить файл с моего сервера. Сначала я использовал методы чтения и записи, а затем метод удаления, и он работал нормально. Поскольку у меня большие файлы, использование метода чтения не является хорошим решением, поскольку оно выделяет много памяти. Теперь я использую readStream и writeStream, но когда writeStream завершается, я закрываю поток и метод delete возвращает false. Я также пытался использовать unlink, но файл до сих пор не удален. Похоже, файл используется другим процессом, но я не уверен, как его выпустить. Вот пример кода:
$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);
Я должен еще раз упомянуть, что при использовании методов чтения и записи удаление работало нормально.
Задача ещё не решена.
Других решений пока нет …