先上代碼吧:
前端代碼:
有很多小伙伴在做表單上傳文件的時候沒有注意表單的上傳格式是什么,就可能導致上傳文件、圖片不成功!
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
< form id = "form1" name = "form1" class = "form-horizontal form-label-left" enctype = "multipart/form-data" method = "post" action = "{{asset('/content/add')}}" ο nsubmit = "submitContent()" > {{method_field('PUT')}} laravel里面使用method_field()函數來偽造一些http請求; < div class = "form-group" > < label class = "control-label col-md-3 col-sm-3 col-xs-12" for = "main_img" >展示主圖 < span class = "required" >*</ span ></ label > < div class = "col-md-6 col-sm-6 col-xs-12" > < div id = "inputBox" > < input type = "file" title = "請選擇圖片" id = "mainImg" name = "main_img" required multiple accept = "image/png,image/jpg,image/gif,image/JPEG" /> < div id = "mainImgBox" ></ div > </ div > </ div > </ div > {!! csrf_field() !!} |
給表單加入token;
后端處理:
首先我使用的是Intervention Image類庫來制作圖片的縮略圖、以及保存圖片到指定位置;
關于Intervention Image類庫我就不多做介紹,如有不了解的請度娘幫助;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
|
<?php namespace App\Http\Controllers\Admin; use App\Http\Controllers\Controller; use Image; use Validator; class ContentController extends Controller{ public function addProcess(){ $inputData = request()->all(); $rules = [ 'main_img' => [ 'file' , 'image' , 'max:10240' ] ]; $validator = Validator::make( $inputData , $rules ); if ( $validator ->fails()){ return back()->withErrors( $validator )->withInput(); } $photo = $inputData [ 'main_img' ]; $file_name = uniqid(). '.' . $photo ->getClientOriginalExtension(); $file_relative_path = 'assess/images/content/' . date ( 'Y-m-d' ); $file_path = public_path( $file_relative_path ); if (! is_dir ( $file_path )){ mkdir ( $file_path ); } $thumbnail_file_path = $file_path . '/thumbnail-' . $file_name ; $image = Image::make( $photo )->resize(200, null, function ( $constraint ) { $constraint ->aspectRatio();})->save( $thumbnail_file_path ); $file_path .= '/' . $file_name ; $image = Image::make( $photo )->save( $file_path ); echo ‘上傳成功!'; } } |
后端處理主要思想:首先通過Validator類庫來檢驗當前上傳上來的文件是否符合要求,如果符合要求,就可以對圖片進行處理了;處理的時候我是先把要保存圖片的相對地址給拼接好,然后通過laravel里面的public_path函數得出絕對的local地址;再去判斷該文件夾是否存在,如果不存在那就創建該文件夾。創建好文件夾后我們就應該對上傳上來的圖片進行進一步處理了,比如我這里需要制作它的縮略圖,并且保證圖片橫縱比,如果有其他的要求,可以前往Intervention Image類庫自行查看怎么制作。
以上這篇laravel實現上傳圖片,并且制作縮略圖,按照日期存放的代碼就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持服務器之家。
原文鏈接:https://blog.csdn.net/a12541254/article/details/79552845