Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/274.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 使用Laravel动态读取S3文件_Php_Laravel_Amazon S3_Laravel 5 - Fatal编程技术网

Php 使用Laravel动态读取S3文件

Php 使用Laravel动态读取S3文件,php,laravel,amazon-s3,laravel-5,Php,Laravel,Amazon S3,Laravel 5,我目前正在从事一个Laravel项目,该项目连接到一个包含多个图像文件的AmazonS3存储桶。我正在尝试创建一个页面,该页面将根据bucket中的文件在页面加载时动态生成图像。我希望它能反映出图像是从页面还是从bucket本身添加或删除的 我曾尝试在网上寻找答案,但每个答案都有一个一致的想法,那就是我有/可以访问特定的文件URL。据我所知,我不能保证我会的,尽管我很容易出错 如果需要,我可以提供更多信息。非常感谢您的帮助或指导 在完成以下所有操作和一些额外的修补之后,我现在面临以下错误: 未

我目前正在从事一个Laravel项目,该项目连接到一个包含多个图像文件的AmazonS3存储桶。我正在尝试创建一个页面,该页面将根据bucket中的文件在页面加载时动态生成图像。我希望它能反映出图像是从页面还是从bucket本身添加或删除的

我曾尝试在网上寻找答案,但每个答案都有一个一致的想法,那就是我有/可以访问特定的文件URL。据我所知,我不能保证我会的,尽管我很容易出错

如果需要,我可以提供更多信息。非常感谢您的帮助或指导


在完成以下所有操作和一些额外的修补之后,我现在面临以下错误:

未定义变量:images(视图:C:\…\upload.blade.php

到目前为止,我将发布我的代码片段,以便更好地说明可能出现的问题:

(日期)。创建图片\u table.php

<?php

use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;

class CreateImagesTable extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('images', function (Blueprint $table) {
            $table->increments('id');
            $table->string('image_path');
            $table->timestamps();
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::dropIfExists('images');
    }
}
<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Image extends Model
{
    protected $guarded = [];
}
....
<form action="{{ url('upload') }}" method="post" enctype="multipart/form-data" style="padding-top: 10px;">
        {{ csrf_field() }}
        <input type="file" name="image" id="fileToUpload">
        <div style="text-align: center">
            <button type="submit" class="btn-default" style="margin-top: 15px;">Upload Image</button>
        </div>
</form>

  @foreach ($images as $image)
    <div class="col-md-3 col-sm-12 panel panel-default widget" style="text-align: center; padding: 10px;margin-right: 10px;">
      <div>
        <img src="{{ $image->image_path }}">
      </div>
    </div>
  @endforeach
....
<?php

namespace App\Http\Controllers;

use App\Image;
use Illuminate\Http\Request;
use Storage;

class UploadController extends Controller
{

    public function fileUpload(Request $request)
    {
        /*$this->validate($request, [
            'image' => 'required|image|mimes:jpeg,png,jpg,gif,svg|max:2048',
        ]);*/

        $imageName = time().'.'.$request->image->getClientOriginalExtension();
        $image = $request->file('image');

        $image = Image::make($image);

        $t = Storage::disk('s3')->put($imageName, file_get_contents($image), 'public');
        $imageName = Storage::disk('s3')->url($imageName);

        $image = Image::create(['image_path' => $imageName]);

        $images = Image::all();

        return view('/upload', compact('images'));

    }

}

嗯,我首先要做的是将S3上存在的所有文件注册到您的数据库中,然后您可以从数据库中返回x数量的随机图片,并从S3中获取它们

从给定表返回10个随机行的普通MySQL查询:

SELECT * FROM images ORDER BY RAND() LIMIT 10
拉威尔之路:

$images = Images::orderByRaw('RAND()')->take(10)->get();
然后,您可以在视图中执行以下操作:

@foreach($images as $image)
    <img src="https://xxx.s3.amazonaws.com/{{ $image->path }}">
     // OR
    <img src="{{ $image->s3_url }}">
@endforeach
编辑:

为了澄清我的答案,$images变量包含从数据库中随机选择的行

$images = Images::get();
这将返回数据库中的所有图像,
images::
引用您正在使用的雄辩模型,就像每个Laravel安装中提供的用户模型一样。例如,
user::get();
这将返回用户表中的所有用户

为了检索所有图像(或用户),您需要一个图像模型

php artisan make:model images
在你的应用程序文件夹中,你现在可以找到Images.php,这是模型,在这里你可以指定模型的任何关系。我不会在这里详细介绍,因为这会很快让人困惑

如果它仍然不是100%清楚,我建议看一些关于雄辩的模型和拉威尔的教程

官方文件->

这个链接有一些非常好和清晰的教程,描述了我的意思,从第6集开始,他谈论的是简单的数据库交互


这也是一个关于雄辩的非常好的系列,这并不难,但是你需要一些时间来了解它,我首先要做的是将S3上的所有文件注册到你的数据库中,然后你可以从数据库返回x数量的随机图片,并从S3获取它们

从给定表返回10个随机行的普通MySQL查询:

SELECT * FROM images ORDER BY RAND() LIMIT 10
拉威尔之路:

$images = Images::orderByRaw('RAND()')->take(10)->get();
然后,您可以在视图中执行以下操作:

@foreach($images as $image)
    <img src="https://xxx.s3.amazonaws.com/{{ $image->path }}">
     // OR
    <img src="{{ $image->s3_url }}">
@endforeach
编辑:

为了澄清我的答案,$images变量包含从数据库中随机选择的行

$images = Images::get();
这将返回数据库中的所有图像,
images::
引用您正在使用的雄辩模型,就像每个Laravel安装中提供的用户模型一样。例如,
user::get();
这将返回用户表中的所有用户

为了检索所有图像(或用户),您需要一个图像模型

php artisan make:model images
在你的应用程序文件夹中,你现在可以找到Images.php,这是模型,在这里你可以指定模型的任何关系。我不会在这里详细介绍,因为这会很快让人困惑

如果它仍然不是100%清楚,我建议看一些关于雄辩的模型和拉威尔的教程

官方文件->

这个链接有一些非常好和清晰的教程,描述了我的意思,从第6集开始,他谈论的是简单的数据库交互


这也是一个关于雄辩的非常好的系列,这并不难,但是你需要一些时间来了解它

首先,$images变量是在哪里建立的?它必须包含任何随机化吗?其次,你提到将图像存储在“数据库”中而不是S3本身,但我不能告诉代码的哪一部分解决了这个问题(为了记录,我刚刚创建了一个MySQL表“images”,其中包含一个“image”varchar列).你能澄清一下吗?@Alexander我已经更新了我的答案,我强烈建议看一下laracasts的最后两个链接,浏览所有视频需要一些时间,但它会在很多方面帮助你;)我正在关注你提供的内容,目前我面临一个新的错误。我已经更新了我的问题,加入了代码片段,这样你就可以更好地看到潜在的问题区域。从头开始,找出问题所在:在上传请求之后,我太专注于尝试传递$images,以至于在初始加载时忘了传递它。现在一切都很好。非常感谢你的帮助,Illyas.)首先,$images变量在哪里建立?它必须包含任何随机化吗?第二,您提到将图像存储在“数据库”中,而不是存储到S3本身,但我无法判断代码的哪一部分解决了这个问题(为了记录,我刚刚创建了一个MySQL表“images”,其中包含一个“image”varchar列)。你能澄清一下吗?@Alexander我已经更新了我的答案,我强烈建议看一下laracasts的最后两个链接,浏览所有视频需要一些时间,但它会在很多方面帮助你;)到目前为止,我一直在关注您提供的内容,目前我面临一个新的错误。我已经更新了我的问题,加入了代码片段,这样你就可以更好地看到潜在的问题区域。从头开始,找出问题所在:在上传请求之后,我太专注于尝试传递$images,以至于在初始加载时忘了传递它。一切正常