springboot+vue实现七牛云头像的上传

 更新时间:2023年08月01日 09:48:03   作者:小新要努力变强  
本文将介绍如何在Spring Boot项目中利用七牛云进行图片上传并将图片存储在云存储中,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

做了个前后端分离的项目,对于用户的头像修改一直不是很满意,

于是用了Vant4的组件库改成了文件点击上传,先是打算存到本地,了解到七牛云的方便后(主要是免费),决定改成七牛云存储图片,记录一下操作,方便查看复习

一、七牛云

七牛云简介

七牛云是国内领先的企业级公有云服务商,致力于打造以数据为核心的场景化PaaS服务。围绕富媒体场景,七牛先后推出了对象存储,融合CDN加速,数据通用处理,内容反垃圾服务,以及直播云服务等。

七牛云对象存储 Kodo 是七牛云提供的高可靠、强安全、低成本、可扩展的存储服务。您可通过控制台、API、SDK 等方式简单快速地接入七牛存储服务,实现海量数据的存储和管理。通过 Kodo 可以进行文件的上传、下载和管理。

总的来说:七牛云是为开发服务的云存储环境,可以在七牛云上托管静态文件资源,并且进行下载,还有很多七牛云的sdk。具体有关七牛云的介绍可以参考开发文档:https://developer.qiniu.com/kodo 

七牛云使用

首先去官网注册  七牛云

登录注册就不再说了,注册完毕之后,点击个人中心,进行身份认证

当身份认证完成之后,点左上角创建存储空间,点这个对象存储Kodo

 点击空间管理,新建存储空间,

让你输入空间名称还有存储区域以及访问控制,按照要求填写即可

现在就有了一个个人仓库了,系统会给我们分配一个测试域名,不过这个域名只有30天有效期,我们可以先用这个域名进行测试,后面来绑定自己的域名

点击空间管理,进入域名管理,即可以添加绑定域名

记住域名一定要是备案域名

二、前端vue配置

这里本人用的是vant4组件

<template>
 <van-uploader v-model="fileList"  :before-read="beforeRead" :after-read="afterRead"/>
</template>
<script setup lang="ts">
const fileList = ref([
  {url: editUser.value.currentValue, isImage: true},
  // Uploader 根据文件后缀来判断是否为图片文件
  // 如果图片 URL 中不包含类型信息,可以添加 isImage 标记来声明
]);
console.log(fileList)
const beforeRead = (file: any) => {
  console.log(file+'jpg')
  if (file.type !== 'image/jpeg') {
    Toast('请上传 jpg 格式图片');
    return false;
  }
  return true;
};
const afterRead = (file: any) => {
  // 返回图片信息
  console.log(file);
  const ImgUploadFile = async (params: any) => {
    // 要把数据变成file格式
    const formData = new FormData(); // 下面有备注
    formData.append('file', params);
    console.log(formData)
    return await myAxios.post('/upload/img', formData, {
      headers: {
        // 注意修改请求头file格式
        'Content-Type': 'multipart/form-data',
      },
    });
  };
  ImgUploadFile(file.file)
  editUser.value.currentValue =  "你自己的域名/"+ file.file.name;
}
</script>

三、后端springboot配置

.在pom.xml添加七牛云依赖

        <!--七牛云上传-->
        <dependency>
            <groupId>com.qiniu</groupId>
            <artifactId>qiniu-java-sdk</artifactId>
            <version>7.2.11</version>
        </dependency>
        <!-- 七牛云依赖Gson -->
        <dependency>
            <groupId>com.google.code.gson</groupId>
            <artifactId>gson</artifactId>
            <version>2.8.6</version>
        </dependency>

controller层

@Controller
@RequestMapping("upload")
public class uploadimg {
    @PostMapping("/img")
    @ResponseBody
    public void up1img(@RequestParam(value = "file", required = false) MultipartFile file) throws IOException {
        if (file.isEmpty()) {
            return;
        }
        String fileName = file.getOriginalFilename();
        InputStream inputStream = file.getInputStream();
        QiniuOssUtils utils = new QiniuOssUtils();
        String upload = utils.upload(inputStream, fileName);
        System.out.println(upload);
    }
}

工具类方法,记得换成你自己的AK和CK以及域名

七牛云的配置信息都可以在个人中心拿到,其中AK和SK:点击密钥管理

import com.google.gson.Gson;
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 java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.InputStream;
/**
 * 七牛OSS管理工具
 */
public class QiniuOssUtils {
    /**
     * 存储空间名
     */
    private static final String BUCKET = "空间名";
    /**
     * accessKey和secretKey
     */
    private static final String ACCESS_KEY = "AK";
    private static final String SECRET_KEY = "CK";
    /**
     * 外网访问地址(内置域名有效期只有30天)
     */
    private static final String BASE_URL = "域名+/";
    /**
     * 上传管理器
     */
    private UploadManager upload;
    /**
     * 桶管理器(存储空间管理器)
     */
    private BucketManager bucket;
    public QiniuOssUtils() {
        //创建配置对象
        Configuration cfg = new Configuration(Zone.zone2());
        //创建上传管理器
        upload = new UploadManager(cfg);
        //创建存储空间管理器
        bucket = new BucketManager(getAuth(), cfg);
    }
    /**
     * 返回认证器(包含的访问密钥)
     *
     * @return
     */
    private Auth getAuth() {
        return Auth.create(ACCESS_KEY, SECRET_KEY);
    }
    /**
     * 获取令牌对象(服务器返回的授权信息)
     *
     * @return
     */
    private String getToken() {
        return getAuth().uploadToken(BUCKET);
    }
    /**
     * 文件上传
     *
     * @param file
     * @return
     */
    public String upload(File file, String key) {
        try {
            return upload(new FileInputStream(file), key);
        } catch (FileNotFoundException | QiniuException e) {
            e.printStackTrace();
        }
        return null;
    }
    /**
     * 上传文件
     *
     * @param is
     * @param key
     * @return
     * @throws QiniuException
     */
    public String upload(InputStream is, String key) throws QiniuException {
        //上传流
        Response response = upload.put(is, key, getToken(), null, null);
        //解析返回结果
        DefaultPutRet putRet = new Gson().fromJson(response.bodyString(), DefaultPutRet.class);
        //将文件的访问地址返回
        return BASE_URL + putRet.key;
    }
    /**
     * 删除文件
     *
     * @param key
     */
    public void delete(String key) {
        try {
            bucket.delete(BUCKET, key);
        } catch (QiniuException e) {
            e.printStackTrace();
        }
    }
}

查看的话,可以在代码中修改,将图片路径存储到数据库中,

查看时到数据库中将路径查询出来,返给前端,前端拿到链接访问即可。

最终效果是这样

 我们也可以来看一下七牛云后台管理的图片信息

到此这篇关于springboot+vue实现七牛云头像的上传的文章就介绍到这了,更多相关springboot vue七牛云头像上传内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 如何彻底删除SVN中的文件和文件夹(附恢复方法)

    如何彻底删除SVN中的文件和文件夹(附恢复方法)

    在SVN中如果删除某个文件或文件夹也可以在历史记录中进行找回,有的时候需要彻底删除某些文件,即不希望通过历史记录进行恢复,需要在服务器上对SVN的数据进行重新整理
    2014-08-08
  • java性能优化之编译器版本与平台对应关系

    java性能优化之编译器版本与平台对应关系

    这篇文章主要介绍了java性能优化--编译器版本与平台对应关系,本章节更加具体化的学习编译器还有哪些可以优化的方便,让你的应用展现出更好的性能,需要的朋友可以参考下
    2022-06-06
  • java中的内部类内部接口用法说明

    java中的内部类内部接口用法说明

    这篇文章主要介绍了java中的内部类内部接口用法说明,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-09-09
  • 史上最通俗理解的Java死锁代码演示

    史上最通俗理解的Java死锁代码演示

    这篇文章主要给大家介绍了关于Java死锁代码演示的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-09-09
  • mac 安装java1.8的过程详解

    mac 安装java1.8的过程详解

    这篇文章主要介绍了mac 安装java1.8,包括下载过程及配置环境相关知识介绍,本文结合实例代码介绍的非常详细,需要的朋友可以参考下
    2023-09-09
  • 从入门到超神进阶的Netty群聊系统

    从入门到超神进阶的Netty群聊系统

    本篇文章基于Netty做一个聊天室案例加强Netty的熟练度,案例的效果是服务端可以广播某客户端的消息给所有客户端。每个客户端监听键盘输入来获取消息,然后发送给服务端
    2021-08-08
  • MyBatis学习教程(七)-Mybatis缓存介绍

    MyBatis学习教程(七)-Mybatis缓存介绍

    MyBatis缓存分为一级缓存和二级缓存一级缓存,本文给大家介绍mybatis缓存知识,非常不错具有参考借鉴价值,感兴趣的朋友一起学习吧
    2016-05-05
  • jpa使用注解生成表时无外键问题及解决

    jpa使用注解生成表时无外键问题及解决

    这篇文章主要介绍了jpa使用注解生成表时无外键问题及解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-06-06
  • springboot+gradle 构建多模块项目的步骤

    springboot+gradle 构建多模块项目的步骤

    这篇文章主要介绍了springboot+gradle 构建多模块项目的步骤,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-05-05
  • 关于Mybatis实体别名支持通配符扫描问题小结

    关于Mybatis实体别名支持通配符扫描问题小结

    MyBatis可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录,这篇文章主要介绍了Mybatis实体别名支持通配符扫描的问题,需要的朋友可以参考下
    2022-01-01

最新评论