【问题标题】:Laravel/Aws - Doesnot delete file after upload s3 bucket with MultipartUploaderLaravel/Aws - 使用 MultipartUploader 上传 s3 存储桶后不删除文件
【发布时间】:2017-01-16 05:41:18
【问题描述】:

我正在尝试使用 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文件。

您有什么建议或解决方法吗?

【问题讨论】:

    标签: php laravel amazon-s3 multipart


    【解决方案1】:

    你是对的,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
    

    【讨论】:

      【解决方案2】:

      您是否允许自己使用地图结构?这也是我上次发生的事情:P

      您必须授予自己上传和删除权限

      【讨论】:

      • 当我在下面的代码中注释上传方法时,文件被成功删除。这就是为什么我确定,这不是与操作系统相关的权限错误
      猜你喜欢
      • 2021-02-07
      • 1970-01-01
      • 2018-02-16
      • 2018-04-25
      • 2020-10-10
      • 2017-09-17
      • 2018-09-11
      • 2015-07-23
      • 1970-01-01
      相关资源
      最近更新 更多