【问题标题】:Multiple image upload in database and showing them in Laravel在数据库中上传多个图像并在 Laravel 中显示它们
【发布时间】:2017-07-16 22:13:57
【问题描述】:

我尝试通过在控制器中执行此操作在数据库中上传多个图像:

公共函数存储(request $request) {

     $pictures=[];
    $input=$request->all();
    if($file=$request->file('images'))  $pictures[]=$request->file('images');
    if($file=$request->file('image1'))  $pictures[]=$request->file('image1');
    if($file=$request->file('image2'))  $pictures[]=$request->file('image2');
    if($file=$request->file('image3'))  $pictures[]=$request->file('image3');
    if($file=$request->file('image4'))  $pictures[]=$request->file('image4');
    if($file=$request->file('image5'))  $pictures[]=$request->file('image5');
    if($file=$request->file('image6'))  $pictures[]=$request->file('image6');

     foreach($pictures as $file)


    for($name=0;$name<=7;$name++)
    {
        $name=$file->getClientOriginalName();
    }
        $file->move('image',$name);

        $input['images']=$name;
        $input['image1']=$name;
        $input['image2']=$name;
        $input['image3']=$name;
        $input['image4']=$name;
        $input['image5']=$name;
        $input['image6']=$name;




  Detail::create($input);

    return redirect('/');


}

它采用图像形式并将所选图像存储在 public/image 文件夹中,但在数据库中存储具有相同图像名称的所有图像。并且在显示的同时它也会多次显示相同的图像。

我知道这里的人对此有解决方案,并且可能有更好的主意。所以请帮我解决这个问题。提前致谢。

上述完成的方法不适合我,所以我在我的控制器中这样做了

     public function uploadSubmit(request $request)
{
    // Coming soon...
    $data=$request->all();
     $imagename =[];
    $i = 0;
    $files =Input::file('images');
    foreach($files as $file){
        $extension = $file->getClientOriginalExtension();
        $imagename[$i] = 'post'.str_random(10).'.jpg';
        $destinationPath =  'assets/posts';
        $file->move($destinationPath, $imagename[$i]);
        $i++;
    }
    Detail::create($files);
        return redirect('/');
    }

在路线中:

    Route::resource('/details','DetailController');

现在我收到这样的错误:DetailController.php 第 43 行中的 FatalThrowableError: 调用数组上的成员函数 getClientOriginalName()。 任何人都可以在这里指出问题。谢谢。

【问题讨论】:

  • 你为哪个版本的 Laravel 做这个?将有助于提供适当的请求示例。您将使用相同的名称将所有图像作为数组发送到 PHP。您是通过标准表单还是 javascript 发布到 PHP?
  • 我使用的是 laravel 5.4.12。

标签: php laravel


【解决方案1】:

所以我会设置一个自定义请求来验证上传的是图像,然后您可以将它们直接上传到您的控制器中,如下面的示例所示。

app\Http\Requests

<?php

namespace App\Http\Requests;

use Illuminate\Foundation\Http\FormRequest;

class ImageRequest extends FormRequest
{
    /**
     * Determine if the user is authorized to make this request.
     *
     * @return bool
     */
    public function authorize()
    {

        // Logic to authorize the request
        return true;
    }

    /**
     * Get the validation rules that apply to the request.
     *
     * @return array
     */
    public function rules()
    {
        $rules = [
            // Any other required laravel validations
        ];

        if (is_array($this->request->get('images'))):
            foreach ($this->request->get('images') as $key => $val):
                if($key == 0)  continue;
                $rules['images.' . $key] = 'required|image';
            endforeach;
        endif;
        return $rules;
    }
}

app\Http\Controllers\ImageController

<?php
namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Http\Requests\ImageRequest;

class ImageController extends Controller
{
    public function store(ImageRequest $request) {  
        $uploadedImagesPath = array();
        foreach($request->input("images") as $key => $image):
            $thisFile = $request->file("images")[$key];
            if($thisFile->isValid()):

                // Get original file name 
                $imageName = $thisFile->getClientOriginalName();                

                // Upload file to default Laravel configured upload location
                $uploadedImagesPath[$key] = $thisFile->storeAs('images', $imageName); 
                // Function was in your example code
                // Detail::create($request->file("images"));

            endif;
        endforeach;
        return redirect('/');
    }

}

您可以在 Laravel 的网站上阅读有关该主题的更多信息

https://laravel.com/docs/5.4/requests#retrieving-uploaded-files

https://laravel.com/docs/5.4/validation#form-request-validation

【讨论】:

  • 我按照你的建议做了,但是浏览器抛出了这样的错误:RouteSignatureParameters.php 第 25 行中的 ReflectionException:类 Groomer\Http\Request\ImageRequest 不存在
  • 更改使用 Groomer\Http\Requests\ImageRequest;使用 app\Http\Requests\ImageRequest;或您的应用程序所命名的任何类 - 忘记从我抓取的示例项目中更改它。
  • 我还对控制器进行了另一项更改,以使 StoreAs 功能正常工作。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-07
  • 2011-12-28
相关资源
最近更新 更多