【发布时间】:2018-12-30 16:25:37
【问题描述】:
我正在建立一个网站,我正在将一些图像文件上传到 S3,然后我试图删除相同的文件,但由于某种原因,Laravel 找不到该文件,即使我已经三次检查该文件是在 S3 中。
这是我正在使用的代码:
<?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();
}
}
}
}
以上代码抛出异常:Image file not found in S3.
请注意,文件名是硬编码的,尽管它通常来自作为 UrlRequest 模型实例的 $request 变量。
我不知道如何进行此操作,因此非常感谢任何帮助!
编辑:我再次尝试了上面的代码并且它工作了一次;但是我上传了一张新图片,现在它又不能正常工作了。
EDIT2:它目前工作,它开始自己工作......
【问题讨论】:
-
您是否检查过您的 s3 实例有一个名为 screenshots 的文件夹。你检查你的 laravel 是否真的连接了同一个桶?
-
@Marcus 是的,bucket 有一个文件夹 screenshots 并且 Laravel 连接成功,因为我从同一个项目上传了图像。
-
'Storage::disk('s3')->getVisibility('screenshots/153228343051117.png');' 给你什么? ARN 是否授予您删除存储桶上文件的权限?您是如何上传文件的?
-
@DimitriMostrey 它目前可以工作,它开始自行工作......
-
@DimitriMostrey 我不知道是什么问题我没有更改它刚刚开始工作的代码,因为它应该因为代码是正确的,我想这可能是一个 S3 问题。
标签: laravel laravel-5 amazon-s3 upload