需要用到的插件
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');