使用Laravel的S3中不存在文件,即使它存在

使用Laravel的S3中不存在文件,即使它存在,laravel,laravel-5,amazon-s3,upload,Laravel,Laravel 5,Amazon S3,Upload,我正在建立一个网站,我正在上传一些图像文件到S3,然后我试图删除相同的文件,但出于某种原因,即使我三次检查该文件是否在S3中,Laravel也没有找到该文件 以下是我正在使用的代码: <?php namespace App\Logic; use App\UrlRequest; use Exception; use Illuminate\Support\Facades\Storage; class OldRequests { /** * Gets all reque

我正在建立一个网站,我正在上传一些图像文件到S3,然后我试图删除相同的文件,但出于某种原因,即使我三次检查该文件是否在S3中,Laravel也没有找到该文件

以下是我正在使用的代码:

<?php

namespace App\Logic;

use App\UrlRequest;
use Exception;
use Illuminate\Support\Facades\Storage;

class OldRequests {

    /**
     * Gets all requests older than 1 day and deletes the corresponding image
     * in s3 if it has not been already deleted
     */
    static function ifOlderThan1DaysDeleteImage()
    {
        $now = time();
        $time1DaysAgo = $now - (1*24*60*60);
        $datetime1DaysAgo = date('Y-m-d H:i:s', $time1DaysAgo);

        $notDeletedYet = UrlRequest::where('image_deleted', '=', 0)
            ->where('created_at', '<', $datetime1DaysAgo)
            ->get();

        foreach ($notDeletedYet as $request)
        {
            if ( ! Storage::disk('s3')->exists('screenshots/153228343051117.png'))
            {
                throw new Exception('Image file not found in S3.');
            }

            $result = Storage::disk('s3')->delete('screenshots/153228343051117.png');

            if ($result);
            {
                $request->image_deleted = 1;
                $request->save();
            }
        }
    }
}

如果循环多次运行,它将在测试中抛出该错误,因为文件是硬编码的


$notDeletedYet可能返回多个对象,因此当您使用硬编码字符串运行该方法时,第一次迭代将按预期删除该文件,第二次迭代将找不到将导致异常的文件

是否检查了s3实例是否有一个名为screenshots的文件夹。你是否检查过你的laravel是否确实连接了同一个bucket?@Marcus是的bucket有一个文件夹截图,laravel连接成功,因为我上载了同一个项目的图像。什么是`存储::磁盘('s3')->getVisibility('screenshots/15322834305117.png');给你什么?ARN是否允许您删除存储桶中的文件?你是如何上传文件的?@DimitriMostrey它目前可以工作,它自己开始工作…@DimitriMostrey我不知道是什么问题我没有更改代码它只是开始工作,因为代码是正确的,我想这可能是S3的问题。目前只有一个文件,我在数据库中检查,然后在S3中检查它是否被分别标记为已删除和从S3中删除的文件,两个都没有完成。因此,如果你添加($notDeletedYet),它只返回一个?是的,它只是一个-而且,我刚刚再次尝试,它开始工作。。。希望它能继续工作。我想这可能是S3Okey的问题,希望你能找出原因