vuejs+element-ui+laravel5.4上傳文件的示例代碼
前言
之前的文章講得太多安裝了,今天就不說這個(gè)了,因?yàn)槲业捻?xiàng)目是前后端分離的,所以基本是分開執(zhí)行代碼邏輯。其中還有跨域問題,主要還是在laravel中添加頭信息放行之類的,這里會(huì)提一下做法。
element-ui的upload組件
我的vue代碼:
<template> <el-upload :action="uploadAction" list-type="picture-card" :on-remove="handleRemove" :on-success="handleSuccess" :before-upload="handleBefore" :file-list="files"> <i class="el-icon-plus"></i> </el-upload> <el-dialog v-model="dialogVisible" size="tiny"> <img width="100%" :src="dialogImageUrl" alt=""> </el-dialog> </template>
這里說一下 on-preview與on-success都可以拿到服務(wù)器的返回路徑
其中:action="uploadAction"是服務(wù)器接引地址, list-type為限制上傳格式
而:on-remove="handleRemove"為移除圖片時(shí)對應(yīng)的方法,:before-upload="handleBefore"
為上傳前的操作,這里我用于限制上傳的數(shù)量限制, :file-list="files"上傳后數(shù)據(jù)綁定在這里
這里我是使用:on-success="handleSuccess"來拿服務(wù)器的返回?cái)?shù)據(jù)的
在
export default { data(){ return { files: [], uploadAction:'http://服務(wù)器地址' } }, methods: { handleSuccess(response){ console.log(response) this.files = [{name: response.name, url: imgBaseUrl + response.photo}] }, handleBefore(){ return this.files.length === 1 ? false : true // 只讓它上傳一張 }, handleRemove(file, fileList) { console.log(file, fileList) } } }
laravel跨域
laravel跨域需要添加一個(gè)中間件
在app/Http/middleware下 新建文件Cors.php,輸入
namespace App\Http\Middleware; use Closure; class Cors { /** * Handle an incoming request. * * @param \Illuminate\Http\Request $request * @param \Closure $next * @return mixed */ public function handle($request, Closure $next) { header('Access-Control-Allow-Origin: *'); header('Access-Control-Allow-Methods: GET, POST, PATCH, PUT, DELETE, OPTIONS'); header('Access-Control-Allow-Headers: Origin, Content-Type, X-Auth-Token'); return $next($request); } }
在appHttpKernel.php
添加
protected $routeMiddleware = [ // some class 'cors' => \App\Http\Middleware\Cors::class, ];
laravel 路由
調(diào)用中間件來限制路由,這里用了dingo api,如不清楚請看前面的文章
$api->version('v1', ['middleware' => 'cors'], function (Router $api) { $api->post('upfile', 'App\\Api\\V1\\Controllers\\Upload\\UploadFiles@upfile'); }
配置Store
打開config/filesystems.php 找到 disks
'disks' => [ // 上面還有很多,下面是自己加的 // 新建一個(gè)本地端uploads空間(目錄) 用于存儲(chǔ)上傳的文件 'uploads' => [ 'driver' => 'local', // 文件將上傳到storage/app/uploads目錄 'root' => storage_path('app/uploads'), // 文件將上傳到public/uploads目錄 如果需要瀏覽器直接訪問 請?jiān)O(shè)置成這個(gè) //'root' => public_path('uploads'), ], ]
開始上傳
新建一個(gè)上傳Controller, 下面很多判斷沒有做,自行做吧
AppApiV1ControllersUploadUploadFiles.php
namespace App\Api\V1\Controllers\Upload; use Dingo\Api\Http\Request; use Dingo\Api\Exception\StoreResourceFailedException; use Storage; class UploadFiles { public function upfile(Request $request) { if (!$request->hasFile('file')) { return response()->json([], 500, '無法獲取上傳文件'); } $file = $request->file('file'); if ($file->isValid()) { // 獲取文件相關(guān)信息 $originalName = $file->getClientOriginalName(); // 文件原名 $ext = $file->getClientOriginalExtension(); // 擴(kuò)展名 $realPath = $file->getRealPath(); //臨時(shí)文件的絕對路徑 $type = $file->getClientMimeType(); // image/jpeg // 上傳文件 $filename = date('Ymd/His'); // 使用我們新建的uploads本地存儲(chǔ)空間(目錄) $path = $file->store($filename, 'uploads'); return response()->json([ 'status_code' => 200, 'message' => 'success', 'photo' => $path, 'name' => $originalName, ]); } else { return response()->json([], 500, '文件未通過驗(yàn)證'); } } }
到此,已經(jīng)可以放上全部要用到的代碼了,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
vue+canvas實(shí)現(xiàn)移動(dòng)端手寫簽名
這篇文章主要為大家詳細(xì)介紹了vue+canvas實(shí)現(xiàn)移動(dòng)端手寫簽名,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-05-05web前端Vue報(bào)錯(cuò):Uncaught?(in?promise)?TypeError:Cannot?read?
這篇文章主要給大家介紹了關(guān)于web前端Vue報(bào)錯(cuò):Uncaught?(in?promise)?TypeError:Cannot?read?properties?of?nu的解決方法,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2023-01-01webpack+vue-cli項(xiàng)目中引入外部非模塊格式j(luò)s的方法
今天小編就為大家分享一篇webpack+vue-cli項(xiàng)目中引入外部非模塊格式j(luò)s的方法,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-09-09vue實(shí)現(xiàn)高德地圖添加多個(gè)點(diǎn)標(biāo)記
地圖多點(diǎn)標(biāo)注其實(shí)是個(gè)非常簡單的問題,這篇文章主要給大家介紹了關(guān)于vue實(shí)現(xiàn)高德地圖添加多個(gè)點(diǎn)標(biāo)記的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2023-06-06基于Echarts圖表在div動(dòng)態(tài)切換時(shí)不顯示的解決方式
這篇文章主要介紹了基于Echarts圖表在div動(dòng)態(tài)切換時(shí)不顯示的解決方式,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-07-07基于vue.js輪播組件vue-awesome-swiper實(shí)現(xiàn)輪播圖
一般做移動(dòng)端輪播圖的時(shí)候,最常用的就是Swiper插件了,而vue.js也有一個(gè)輪播組件vue-awesome-swiper,用法跟swiper相似。接下來通過本文給大家詳解講解vue.js輪播組件vue-awesome-swiper實(shí)現(xiàn)輪播圖實(shí)例代碼,需要的朋友參考下2017-03-03vue動(dòng)態(tài)加載SVG文件并修改節(jié)點(diǎn)數(shù)據(jù)的操作代碼
這篇文章主要介紹了vue動(dòng)態(tài)加載SVG文件并修改節(jié)點(diǎn)數(shù)據(jù)的方法,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-08-08vue?懸浮窗且?guī)ё詣?dòng)吸附功能實(shí)現(xiàn)demo
這篇文章主要為大家介紹了vue?懸浮窗且?guī)ё詣?dòng)吸附功能實(shí)現(xiàn)demo,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-06-06