Laravel / Aws - 使用MultipartUploader上传s3存储桶后不删除文件

时间:2016-09-08 10:21:19

标签: php laravel amazon-s3 multipart

我正在使用aws api上传大型视频文件到我的Amazon S3存储桶。

$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 个答案:

答案 0 :(得分:0)

你是否在地图结构中给了自己许可?这也是上次发生的事情:P

您必须获得上传和发布许可。删除

答案 1 :(得分: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