【问题标题】:Laravel Upload Image to img folderLaravel 上传图片到 img 文件夹
【发布时间】:2018-01-25 12:37:19
【问题描述】:

我将带有form class 的图像或更多图像上传到我的存储的最佳方式是什么?

刀片:

<form class="" action="{{route('newproduct')}}" method="post">
<div class="form-group">
        <div class="form-group">
          <label for="myimage">  <img src="/img/{{$user->myimage}}" height="80" width="80"></label>
          <input type="file" id="myimage" name="myimage"></font>

        </div>

      </div>

控制器:

   public function NewProduct(Request $request){
      $user = Auth::user();
      $user->myimage= date('mdYHis') . uniqid() . $request->myimage;
      $user->save();
      return redirect()->back();
    }

在我的控制器中,它仅将随机生成的名称保存在数据库中,但不将文件上传到我的服务器。我想用这个路径来保存路径:

/public/img/

没有图片路径的更新代码:

    public function NewProduct (Request $request)
      if($request->hasFile('myimage')){
    if ($request->file('myimage')->isValid()) {
      $user = Auth::user();
      $image_name = date('mdYHis') . uniqid() . $request->file('myimage')->getClientOriginalName();
      $user->save();
      return redirect()->back();
    }

}

谢谢

【问题讨论】:

  • 需要添加到表单enctype="multipart/form-data"
  • 但我还需要控制器中的代码?
  • 检查并尝试我的答案

标签: laravel laravel-5


【解决方案1】:

首先,将enctype="multipart/form-data" 添加到&lt;form&gt;

然后,在你的控制器中添加这个:

public function NewProduct(Request $request){
    if($request->hasFile('myimage')){
        if ($request->file('myimage')->isValid()) {
            $user = Auth::user();
            $image_name = date('mdYHis') . uniqid() . $request->file('myimage')->getClientOriginalName();
            $path = base_path() . '/public/img';
            $request->file('myimage')->move($path,$image_name);
            $user->myimage = $path.$image_name;
            $user->save();
            return redirect()->back();
        }
        return redirect()->back()->with('error', 'image not valid');
    }
    return redirect()->back()->with('error', 'no image');
}

对于多个图像只需要遍历 myimage 数组:

public function NewProduct(Request $request){
    if($request->hasFile('myimage')){
        // Do a loop over all images
        foreach ($request->file('myimage') as $image) {
            if ($image->isValid()) {
                $user = Auth::user();
                $image_name = date('mdYHis') . uniqid() . $image->getClientOriginalName();
                $path = base_path() . '/public/img';
                $image->move($path,$image_name);
                $user->myimage = $path.$image_name;
                $user->save();
                return redirect()->back();
            }
        }
        // end loop
    }
    return redirect()->back()->with('error', 'no image');
}

这种方法的一个问题是用户将使用最后一张图像来存储它(所有图像都将被上传,但用户图像路径将是最后一张)。

可以解决创建一个表来存储用户图像路径并将图像保存在那里(一对多关系)

【讨论】:

  • 解析错误:语法错误,意外 'if' (T_IF),期待 ';'或'{'
  • if 语句前有一行没有;
  • 添加但:解析错误:语法错误,意外'if'(T_IF),期望函数(T_FUNCTION)
  • 您将代码放在哪里?让我更新它并设置一个函数...
  • 效果很好:) 但它会将图像保存为:“/var/www/html/myproject/public/img012320180734575a66d791781e1btcicon.png”,其中 img 在图片名称前没有“/”。为什么路径这么长而不是“/img/imagename.png”?
【解决方案2】:

刀片:

<form  action="{{route('newproduct')}}" method="post" enctype="multipart/form-data">
     <div class="form-group">
        <div class="form-group">
          <label for="myimage">  
          <input type="file" id="myimage" name="myimage"></font>
        </div>
      </div>
</form>

控制器:

use Illuminate\Support\Facades\Storage;

  public function NewProduct(Request $request){

        // if request has file
        if($request->hasFile('myimage')){

            $filenameWithExt=$request->file('myimage')->getClientOriginalName();

            $filename=pathinfo($filenameWithExt,PATHINFO_FILENAME);

            $extension=$request->file('myimage')->getClientOriginalExtension();

            $fileNameToStore= date('mdYHis') . uniqid() .$filename.'.'.$extension;

            request()->myimage->move(public_path('img'), $fileNameToStore);  

     }else{
           // if no file from request , then put one no-image.jpeg in public/img folder
           $fileNameToStore='no-image.jpeg'
      }

  $user = Auth::user();
  $user->myimage=$fileNameToStore;
  $user->save();
  return redirect()->back();
  }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-11-20
    • 1970-01-01
    • 2023-03-13
    • 2020-05-20
    • 2014-05-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多