需要用到的插件

vue-image-crop-upload https://github.com/dai-siki/vue-image-crop-upload

laravel-filesystem-qiniu https://github.com/overtrue/laravel-filesystem-qiniu

上传到七牛云

1、安装vue-image-crop-upload和babel-polyfill(依赖)

cnpm install babel-polyfill  -save
cnpm install vue-image-crop-upload  --save

2、vue文件,在app.js中注册和view引用

<template>
    <div style="text-align: center">

        <my-upload field="img"
                   @crop-success="cropSuccess"
                   @crop-upload-success="cropUploadSuccess"
                   @crop-upload-fail="cropUploadFail"
                   v-model="show"
                   :width="300"
                   :height="300"
                   url="/avatar"
                   :params="params"
                   :headers="headers"
                   img-format="png"></my-upload>
        <img :src="imgDataUrl" width="80">
        <div style="margin-top: 20px;">
            <button class="btn btn-default" @click="toggleShow">修改头像</button>
        </div>
    </div>
</template>

<script>
    import 'babel-polyfill'; // es6 shim

    import myUpload from  'vue-image-crop-upload/upload-2.vue';
    export default {
        props:['avatar'],
        data() {

            return {
                show: false,
                params: {
                    _token: Laravel.csrfToken,
                    name: 'img'
                },
                headers: {
                    smail: '*_~'
                },
                imgDataUrl: this.avatar
            }

        },
        components: {
            'my-upload': myUpload
        },
        methods: {
            toggleShow() {
                this.show = !this.show;
            },
           
            cropSuccess(imgDataUrl, field){
                console.log('-------- crop success --------');
                this.imgDataUrl = imgDataUrl;
            },


            cropUploadSuccess(response, field){
                console.log('-------- upload success --------');
                this.imgDataUrl = response.url;
                console.log(response);
                this.toggleShow();
                console.log('field: ' + field);
            },

            cropUploadFail(status, field){
                console.log('-------- upload fail --------');
                console.log(status);
                console.log('field: ' + field);
            }
        }
    }
</script>

3、route

Route::post('/avatar','UsersController@changeAvatar'); //存储文件

4、控制器(上传到服务器)

$file = $request->file('img');
$filename = md5(time().user()->id).'.'.$file->getClientOriginalExtension();
$file->move(public_path('avatars'),$filename);
user()->avatar = 'avatars/'.$filename;  //public/avatars目录
user()->save();
return ['url'=>user()->avatar];

上传到七牛云

1、2、3同上

4、安装laravel-filesystem-qiniu

composer require laravel-filesystem-qiniu

5、config\app.php注册

\Overtrue\LaravelFilesystem\Qiniu\QiniuStorageServiceProvider::class,

6、env配置

QINIU_ACCESS_KEY= ****
QINIU_SECRET_KEY= ****
QINIU_BUCKET= ****
QINIU_DOMAIN= ****

7、设置文件流config\filesystems.php

<?php

//外部使用方法: config('filesystems.disks.qiniu.domain')
return [

    'disks' => [
        'qiniu' => [
            'driver'     => 'qiniu',
            'access_key' => env('QINIU_ACCESS_KEY', ''),
            'secret_key' => env('QINIU_SECRET_KEY', ''),
            'bucket'     => env('QINIU_BUCKET', ''),
            'domain'     => env('QINIU_DOMAIN', ''), // or host: https://xxxx.clouddn.com
        ],

    ],

];

8、控制器

 $file = $request->file('img');
        $filename = 'avatars/'.md5(time().user()->id).'.'.$file->getClientOriginalExtension();
       Storage::disk('qiniu')->writeStream($filename,fopen($file->getRealPath(),'r'));
        user()->avatar = 'http://'.config('filesystems.disks.qiniu.domain').'/'.$filename;
        user()->save();
        return ['url'=>user()->avatar];

注意:更多操作:详见https://github.com/overtrue/laravel-filesystem-qiniu

$disk = Storage::disk('qiniu');

// create a file
$disk->put('avatars/filename.jpg', $fileContents);

// check if a file exists
$exists = $disk->has('file.jpg');

// get timestamp
$time = $disk->lastModified('file1.jpg');
$time = $disk->getTimestamp('file1.jpg');

// copy a file
$disk->copy('old/file1.jpg', 'new/file1.jpg');

// move a file
$disk->move('old/file1.jpg', 'new/file1.jpg');

// get file contents
$contents = $disk->read('folder/my_file.txt');

// fetch url content
$file = $disk->fetch('folder/save_as.txt', $fromUrl);

// get file url
$url = $disk->getUrl('folder/my_file.txt');

// get file upload token
$token = $disk->getUploadToken('folder/my_file.txt');
$token = $disk->getUploadToken('folder/my_file.txt', 3600);

// get private url
$url = $disk->privateDownloadUrl('folder/my_file.txt');

 

 

 

 

 

 

 

Logo

瓜分20万奖金 获得内推名额 丰厚实物奖励 易参与易上手

更多推荐