首页 > 解决方案 > 有没有办法获取我在 s3 存储桶上上传的文件的原始 url 名称

问题描述

我目前正在使用 laravel 在 s3 存储桶上存储多个文件。现在我已经编写了一些函数来存储文件。我遇到的主要问题是每次我返回文件时它总是显示 tmp 文件。在我现在观看的教程中与我返回的输出不同。为了更好地理解,我将展示一些图片。

问题:为什么我的输出返回 tmp 文件名?

我的输出:

我的输出

教程输出:

教程输出

我的功能:

        $file_upload = $request->file('files');

        foreach($file_upload as $file) {

            $file->store('bucket','s3');

            // Storage::disk('s3')->setVisibility($file,'public');

            $store_file = File::create([
                'filename' => basename($file),
                'url' => Storage::disk('s3')->url($file)
            ]);

        }
        
     
       
        return $store_file;

标签: laravelamazon-s3

解决方案


在将文件名和 url 存储在数据库中时,您必须使用返回值store()而不是使用返回值:UploadedFile

$file_upload = $request->file('files');

foreach ($file_upload as $file) {
    $path = $file->store('bucket', 's3');

    $store_file = File::create([
        'filename' => basename($path),
        'url' => Storage::disk('s3')->url($path)
    ]);
}

return $store_file;

PS:

您的 return 语句没有多大意义,目前当您上传多张图片时,它只会返回最后上传的一张,而不是全部,因为$store_file每次迭代都会覆盖。


推荐阅读