Laravel / Aws — не удаляет файл после загрузки корзины s3 с MultipartUploader

Я пытаюсь загрузить большой видеофайл в свою корзину Amazon S3 с помощью aws api.

$uploader = new MultipartUploader($s3->getDriver()->getAdapter()->getClient(), $localFullFilePath, [
'bucket' => env('S3_BUCKET'),
'key'    => $s3fullFullFilePath,
]);

try {
$result = $uploader->upload();
Log::info("Upload complete");
} catch (MultipartUploadException $e) {
Log::info($e->getMessage());
}

Затем я удаляю свои загруженные видео с кодом ниже.

foreach ($oldVideos as $oneVideo) {
// $localFullFilePath = $localFilePath . $oneVideo;
unlink($localFullFilePath);
}

Мои видео загружаются успешно, но когда я пытаюсь удалить свой локальный файл, выдается сообщение об ошибке «Отказано в доступе».

Я уверен, что это не ошибка разрешения файла, потому что это происходит только при загрузке файла на S3.
Я думаю, что API не fclose файл после прочтения.

Вы предлагаете какие-либо советы или обходные пути?

2

Решение

Вы дали себе разрешение в структуре карты? Это то, что случилось со мной в прошлый раз: P

Вы должны дать себе разрешение на загрузку & удалять

0

Другие решения

Вы правы, API не закрывает файл. Вы можете сделать это вручную:

// open a file
$source = fopen($localFullFilePath, 'rb');

// pass a resource, not a path
$uploader = new MultipartUploader($s3->getDriver()->getAdapter()->getClient(), $source, [
'bucket' => env('S3_BUCKET'),
'key'    => $s3fullFullFilePath,
]);

// upload
try {
$result = $uploader->upload();
Log::info("Upload complete");
} catch (MultipartUploadException $e) {
Log::info($e->getMessage());
}

// close
fclose($source);

// now we can remove it
0

По вопросам рекламы [email protected]