使用Laravel的S3中不存在文件,即使它存在
我正在建立一个网站,我正在上传一些图像文件到S3,然后我试图删除相同的文件,但出于某种原因,即使我三次检查该文件是否在S3中,Laravel也没有找到该文件 以下是我正在使用的代码:使用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
<?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的问题,希望你能找出原因