vue+cropperjs实现图片剪裁,上传七牛云

该博客详细介绍了如何结合Vue和Cropperjs库来实现图片剪裁功能,接着将剪裁后的图片上传到七牛云存储,并获取图片的key和hash值。最后,将七牛云的图片地址发送到服务器进行保存。
摘要由CSDN通过智能技术生成

通过vue element UI  的upload组件,选择图片--进行图片剪裁--上传七牛云--获取图片key和hash--获取图片七牛云存储地址--上传地址到服务器。

父组件:

<template>
    <div class="upload-img">

        <h2>上传封面<span class="mark">上传视频缩略图封面,建议上传16:9的图片,仅支持JPEG,BMP,PNG格式,图像小于2M</span></h2>

        <div class="select-button clearfix">

        <el-upload :show-file-list="false" :auto-upload="false" :data="{token:token}" action="http://up-z2.qiniu.com/" :http-request="upload"  name="file" ref="coverImg"  list-type="picture-card" class="upload-plus clearfix" :on-change="handleChange" :on-preview="handlePictureCardPreview" :before-upload="handleBefore">

            <i class="el-icon-plus add-img">点击添加图片</i>

        </el-upload>
        <div class="file" v-if="showCover">
            <div class="file-box">
                <span class="tag" :style="{backgroundColor:tagObj.color}">{
  {tagObj.label}}</span>
                <img :src="item.coverUrl" alt="">
                <div class="cover-bar">
                    <a href="javascript:;" class="el-icon-view" @click="handleCheckView"></a>
                    <a href="javascript:;" class="el-icon-delete2" @click="handleDelete"></a>
                </div>
            </div>
        </div>
        <cropper :panel="panel" :url="url" v-if="panel" @handleShow="handleShow" @handleGetUrl="handleGetUrl" @upload="upload"></cropper>
        <el-dialog v-model="dialogVisible" size="tiny">

            <img width="100%" :src="dialogImageUrl" alt="">

        </el-dialog>

        </div>

    </div>
</template>
<script>
import url from '../urls/index'
import EditVideo from '../api/service/videoEdit'
import cropper from '@/components/common/cropper.vue'
    export default {

        data() {

            return {
                dialogImageUrl: '',//查看缩略图弹框的图片url
                dialogVisible: false,//查看缩略图弹框显示
                uploadUrl:'',//上传的url
                fileName:"",//文件名
                showCover:false,//上传缩略图成功控制是否显示
                // coverUrl:"" //上传成功后的url地址
                panel:false,
                url:''
            }

        },
        components: {
          cropper
        },
        computed:{
            item:{
                get:function(){
                    return JSON.parse(window.localStorage.getItem('item'))
                },
                set:function(value){
                    window.localStorage.setItem('item',JSON.stringify(value))
                }
            },
            tagObj:{
                get:function(){
                    return this.$store.getters.GET_TAG_OBJ
                },
                set:function(value){
                    this.$store.commit('UPDATE_TAG_OBJ',value)
                }
            },
            token:{
                get:function(){
                    return this.$store.getters.GET_TOKEN
                },
                set:function(value){
1. 首先,需要在七牛云上创建一个存储空间,并获取该存储空间的accessKey、secretKey、bucket和domain。 2. 在Springboot中引入七牛云的Java SDK,可以通过Maven或Gradle进行引入。例如,在Maven中添加以下依赖: ``` <dependency> <groupId>com.qiniu</groupId> <artifactId>qiniu-java-sdk</artifactId> <version>[7.2.0, 7.2.99]</version> </dependency> ``` 3. 创建一个七牛云的配置类,用于存储accessKey、secretKey、bucket和domain等配置信息。 ``` @Configuration public class QiniuConfig { @Value("${qiniu.accessKey}") private String accessKey; @Value("${qiniu.secretKey}") private String secretKey; @Value("${qiniu.bucket}") private String bucket; @Value("${qiniu.domain}") private String domain; @Bean public Auth auth() { return Auth.create(accessKey, secretKey); } @Bean public Configuration configuration() { return new Configuration(Zone.zone0()); } @Bean public UploadManager uploadManager() { return new UploadManager(configuration()); } @Bean public BucketManager bucketManager() { return new BucketManager(auth(), configuration()); } @Bean public StringMap putPolicy() { StringMap putPolicy = new StringMap(); putPolicy.put("returnBody", "{\"key\":\"$(key)\",\"hash\":\"$(etag)\",\"bucket\":\"$(bucket)\",\"name\":\"$(fname)\",\"size\":$(fsize)}"); return putPolicy; } @Bean public String uploadToken() { return auth().uploadToken(bucket, null, 3600, putPolicy()); } @Bean public String domain() { return domain; } } ``` 4. 在Vue中使用element-ui的上传组件,设置上传的接口为Springboot的接口。 ``` <el-upload class="upload-demo" action="/api/upload" :show-file-list="false" :on-success="handleSuccess" :before-upload="beforeUpload" :headers="{Authorization: 'Bearer ' + token}" > <el-button size="small" type="primary">点击上传</el-button> <div slot="tip" class="el-upload__tip">只能上传jpg/png文件,且不超过500kb</div> </el-upload> ``` 5. 在Springboot中编写上传接口,在该接口中使用七牛云的Java SDK进行上传。 ``` @RestController @RequestMapping("/api") public class UploadController { @Autowired private UploadManager uploadManager; @Autowired private String uploadToken; @Autowired private String domain; @PostMapping("/upload") public ResponseEntity<?> upload(@RequestParam("file") MultipartFile file) throws IOException { try { Response response = uploadManager.put(file.getBytes(), null, uploadToken); if (response.isOK()) { String key = JSON.parseObject(response.bodyString()).getString("key"); return ResponseEntity.ok(domain + "/" + key); } } catch (QiniuException e) { e.printStackTrace(); } return ResponseEntity.badRequest().build(); } } ``` 6. 程序运行后,在Vue上传图片即可自动将图片上传七牛云,并返回图片的访问URL
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值