vuejs+element-ui+laravel5.4上传文件的示例代码


Posted in Javascript onAugust 12, 2017

前言

之前的文章讲得太多安装了,今天就不说这个了,因为我的项目是前后端分离的,所以基本是分开执行代码逻辑。其中还有跨域问题,主要还是在laravel中添加头信息放行之类的,这里会提一下做法。

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都可以拿到服务器的返回路径

其中:action="uploadAction"是服务器接引地址, list-type为限制上传格式

而:on-remove="handleRemove"为移除图片时对应的方法,:before-upload="handleBefore"

为上传前的操作,这里我用于限制上传的数量限制, :file-list="files"上传后数据绑定在这里

这里我是使用:on-success="handleSuccess"来拿服务器的返回数据的

export default {
  data(){
    return {
      files: [],
      uploadAction:'http://服务器地址'
    }
  },
  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跨域需要添加一个中间件

在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 路由

调用中间件来限制路由,这里用了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' => [

  // 上面还有很多,下面是自己加的
  // 新建一个本地端uploads空间(目录) 用于存储上传的文件
    'uploads' => [

      'driver' => 'local',

      // 文件将上传到storage/app/uploads目录
      'root' => storage_path('app/uploads'),

      // 文件将上传到public/uploads目录 如果需要浏览器直接访问 请设置成这个
      //'root' => public_path('uploads'),
    ],
]

开始上传

新建一个上传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()) {
      // 获取文件相关信息
      $originalName = $file->getClientOriginalName(); // 文件原名
      $ext = $file->getClientOriginalExtension();   // 扩展名
      $realPath = $file->getRealPath();  //临时文件的绝对路径
      $type = $file->getClientMimeType();   // image/jpeg

      // 上传文件
      $filename = date('Ymd/His');
      // 使用我们新建的uploads本地存储空间(目录)
      $path = $file->store($filename, 'uploads');
      return response()->json([
        'status_code' => 200,
        'message' => 'success',
        'photo' => $path,
        'name' => $originalName,
      ]);

    } else {
      return response()->json([], 500, '文件未通过验证');
    }
  }
}

到此,已经可以放上全部要用到的代码了,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
单独使用CKFinder选择图片的方法
Aug 21 Javascript
jquery实现兼容浏览器的图片上传本地预览功能
Oct 14 Javascript
JavaScript淡入淡出渐变简单实例
Aug 06 Javascript
全面解析Bootstrap排版使用方法(文字样式)
Nov 30 Javascript
基于jQuery实现中英文切换导航条效果
Sep 18 Javascript
Javascript获取background属性中url的值
Oct 17 Javascript
pm2 部署 node的三种方法示例
Oct 20 Javascript
JS与jQuery判断文本框还剩多少字符可以输入的方法
Sep 01 jQuery
对angular 监控数据模型变化的事件方法$watch详解
Oct 09 Javascript
vue-router判断页面未登录自动跳转到登录页的方法示例
Nov 04 Javascript
layui table设置某一行的字体颜色方法
Sep 05 Javascript
Vue路由管理器Vue-router的使用方法详解
Feb 05 Javascript
浅谈关于angularJs中使用$.ajax的注意点
Aug 12 #Javascript
详解Vue-Cli 异步加载数据的一些注意点
Aug 12 #Javascript
js模块加载方式浅析
Aug 12 #Javascript
浅谈angular2 组件的生命周期钩子
Aug 12 #Javascript
Node.js pipe实现源码解析
Aug 12 #Javascript
vue实现移动端图片裁剪上传功能
Aug 18 #Javascript
JavaScript实现图片切换效果
Aug 12 #Javascript
You might like
PHP MYSQL乱码问题,使用SET NAMES utf8校正
2009/11/30 PHP
php 中英文语言转换类代码
2011/08/11 PHP
php file_get_contents抓取Gzip网页乱码的三种解决方法
2013/11/12 PHP
php生成静态页面的简单示例
2014/04/17 PHP
利用谷歌 Translate API制作自己的翻译脚本
2014/06/04 PHP
分享下php5类中三种数据类型的区别
2015/01/26 PHP
php短址转换实现方法
2015/02/25 PHP
PHP自带ZIP压缩、解压缩类ZipArchiv使用指南
2015/03/03 PHP
jQuery向下滚动即时加载内容实现的瀑布流效果
2016/01/07 PHP
ThinkPHP的常用配置选项汇总
2016/03/24 PHP
Laravel中间件实现原理详解
2016/10/09 PHP
超清晰的document对象详解
2007/02/27 Javascript
让网页根据不同IE版本显示不同的内容
2009/02/08 Javascript
jQuery 1.4 15个你应该知道的新特性(译)
2010/01/24 Javascript
javascript实现的像java、c#之类的sleep暂停的函数代码
2010/03/04 Javascript
不使用中间变量,交换int型的 a, b两个变量的值。
2010/10/29 Javascript
js实现文件上传表单域美化特效
2015/11/02 Javascript
JS获取屏幕高度的简单实现代码
2016/05/24 Javascript
深入理解vue.js中$watch的oldvalue与newValue
2017/08/07 Javascript
JS如何实现在页面上快速定位(锚点跳转问题)
2017/08/14 Javascript
JavaScript偏函数与柯里化实例详解
2019/03/27 Javascript
剖析Python的Tornado框架中session支持的实现代码
2015/08/21 Python
python3中int(整型)的使用教程
2017/03/23 Python
python difflib模块示例讲解
2017/09/13 Python
Python实现图片滑动式验证识别方法
2017/11/09 Python
在python中利用numpy求解多项式以及多项式拟合的方法
2019/07/03 Python
Python操作redis和mongoDB的方法
2019/12/19 Python
Python 如何对文件目录操作
2020/07/10 Python
python selenium xpath定位操作
2020/09/01 Python
html5+svg学习指南之SVG基础知识
2014/12/17 HTML / CSS
英国儿童图书网站:Scholastic
2017/03/26 全球购物
入党介绍人意见范文
2015/06/01 职场文书
董事会决议范本
2015/07/01 职场文书
2015年秋季灭鼠工作总结
2015/07/27 职场文书
Pytorch中Softmax和LogSoftmax的使用详解
2021/06/05 Python
webpack的移动端适配方案小结
2021/07/25 Javascript