SpringBoot + Vue整合七牛云

依赖

        <dependency>
            <groupId>com.qiniu</groupId>
            <artifactId>qiniu-java-sdk</artifactId>
            <version>7.2.18</version>
        </dependency>

        <dependency>
            <groupId>com.qiniu</groupId>
            <artifactId>happy-dns-java</artifactId>
            <version>0.1.6</version>
            <scope>test</scope>
        </dependency>

Service

import java.io.FileInputStream;

public interface UpdateImageService {
    String uploadQNImg(FileInputStream file, String key);
    String deleteImg(String fileName);
}

ServiceImpl

package com.home.backend.service.impl;

import com.google.gson.Gson;
import com.home.backend.service.UpdateImageService;
import com.qiniu.common.QiniuException;
import com.qiniu.common.Zone;
import com.qiniu.http.Response;
import com.qiniu.storage.BucketManager;
import com.qiniu.storage.Configuration;
import com.qiniu.storage.UploadManager;
import com.qiniu.storage.model.DefaultPutRet;
import com.qiniu.util.Auth;
import org.springframework.stereotype.Service;

import java.io.FileInputStream;

@Service
public class UpdateImageServiceImpl implements UpdateImageService {

    private static final String ACCESS_KEY = "AK";
    private static final String SECRET_KEY = "SK";
    private static final String BUCKETNAME = "dizhi";
    private static final Auth auth = Auth.create(ACCESS_KEY, SECRET_KEY);
    private static final String DOMAIN = "tuchuang.yangcedu.top";

    //将图片上传到七牛云
    @Override
    public  String uploadQNImg(FileInputStream file, String key) {
        // 构造一个带指定Zone对象的配置类, 注意这里的Zone.zone0需要根据主机选择
        Configuration cfg = new Configuration(Zone.zone2());
        // 其他参数参考类注释
        UploadManager uploadManager = new UploadManager(cfg);
        // 生成上传凭证,然后准备上传

        try {
            String upToken = auth.uploadToken(BUCKETNAME);
            try {
                Response response = uploadManager.put(file, key, upToken, null, null);
                // 解析上传成功的结果
                DefaultPutRet putRet = new Gson().fromJson(response.bodyString(), DefaultPutRet.class);

                // 这个returnPath是获得到的外链地址,通过这个地址可以直接打开图片
                return DOMAIN + "/" + putRet.key;
            } catch (QiniuException ex) {
                Response r = ex.response;
                System.err.println(r.toString());
                try {
                    System.err.println(r.bodyString());
                } catch (QiniuException ex2) {
                    //ignore
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return "";
    }
    @Override
    public String deleteImg(String fileName) {
        Configuration cfg = new Configuration(Zone.zone2());
        BucketManager bucketManager = new BucketManager(auth, cfg);
        try {
            bucketManager.delete(BUCKETNAME, fileName);
            return "删除成功";
        } catch (QiniuException e) {
            return "删除失败";
        }
    }
}

Conteoller

package com.home.backend.controller;

import com.home.backend.service.impl.UpdateImageServiceImpl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

import java.io.FileInputStream;
import java.io.IOException;
import java.util.Map;
import java.util.UUID;

@Controller
public class UpdateImageController {

    @Autowired
    private UpdateImageServiceImpl uploadImageServiceImpl;

    @ResponseBody
    @PostMapping("/api/upload/")
    public String postUserInferUpDate(@RequestParam("file") MultipartFile file) throws  IOException {

        // 用来获取其他参数
        if (!file.isEmpty()) {
            FileInputStream inputStream = (FileInputStream) file.getInputStream();
            //获得上传的图片地址
            String path = uploadImageServiceImpl.uploadQNImg(inputStream, UUID.randomUUID().toString().substring(0,8)); // KeyUtil.genUniqueKey()生成图片的随机名
            System.out.print("七牛云返回的图片链接:" + path);
            return path;
        }
        return "上传失败";
    }

    @ResponseBody
    @PostMapping("/api/img/delete/")
    public String delete(@RequestParam Map<String, String> data) {
        return uploadImageServiceImpl.deleteImg(data.get("filename"));
    }

}

前端

<template>

  <input type="file" id="files1" @change="put">


  <a href="http://www.yangcedu.top/" >
    <el-col :span="8">
      <el-card style="" shadow="hover"> Hover </el-card>
    </el-col>
  </a>

  <el-button @click="delete1">
    删除
  </el-button>

</template>

<script>

import $ from 'jquery'
import { ref } from 'vue';
export default {
    setup() {

      let put = () => {
        const selectedFile = document.getElementById('files1').files[0];
        let fromdate = new FormData();

        fromdate.append("file", selectedFile);
        $.ajax({
          url: "http://127.0.0.1:3000/api/upload/",
          type: "post",
          data: fromdate,
          cache: false,
          processData: false,
          contentType: false,
          success(resp) {
            console.log(resp);
          },
          error(resp) {
            console.log(resp);
          }
        })
      }

      let delete1 = () => {
        const fileName = ref('39da4f9d');
        $.ajax({
          url: "http://127.0.0.1:3000/api/img/delete/",
          type: "post",
          data: {
            filename: fileName.value,
          },
          success(resp) {
            console.log(resp);
          },
          error(resp) {
            console.log(resp);
          }
        })
      }

      return {
        put,
        delete1,
      }

    }
}

</script>

<style>

a {
  text-decoration: none;
}

</style>

设置

spring.servlet.multipart.enabled=true
spring.servlet.multipart.max-file-size=5MB  //单个文件
spring.servlet.multipart.max-request-size=50MB  //全部文件

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值