Java上传图片至七牛云对象存储

前言:该文章从注册七牛云到实现代码上传的步骤都有,若您只需要代码,请直接向下划

一、申请七牛云对象存储

申请七牛云对象存储不需要钱,免费使用!!!(我没打广告)
注册七牛云账号后进入 管理控制台
找到存储空间并新建存储空间
在这里插入图片描述

输入你的存储空间名,选择存储区域,以及控制访问.确定

二、绑定域名

这时你的存储空间就已经申请好了,它还需要一个访问域名用来访问空间中的内容,开始会送你一个月的域名使用期,等使用期过后你就要绑定域名了
在这里插入图片描述
点击绑定域名,后输入你的访问域名

在这里插入图片描述
其他选项默认即可

注意这里的加速域名的前缀是可以随便填写的,并不是必须要填写www
但后面的域名则必须是你真实拥有的域名

三、配置CNAME

域名并不是添加后就可以直接使用,还需要去配置CNAME。

这里因为我的域名是在腾讯云注册的,所以配置CNAME以腾讯云为例,当然其他地方的配置过程大差不差,您可以点击如果配置CNAME按钮进行查看七牛云的官方配置流程

在这里插入图片描述
打开腾讯云进入控制台,搜索 DNS解析DNSPod进入
在这里插入图片描述
找到你刚刚填写的域名,并点击后面的解析按钮
在这里插入图片描述
点击添加记录后,将你刚刚在七牛云添加的域名数据填写
在这里插入图片描述
如上图,记录值就是在七牛云添加域名后给的CNAME,填写好后点击保存,在你的七牛云对象存储空间就可以使用这个域名了。

四、java代码实现上传图片至七牛云对象存储

1、引入Jar包
在pom.xml中引入jar包,使用Maven,jar包版本在7.4.0~7.4.99之间的,比如:7.4.0取不到就区7.4.1依次往后

        <dependency>
            <groupId>com.qiniu</groupId>
            <artifactId>qiniu-java-sdk</artifactId>
            <version>[7.4.0, 7.4.99]</version>
        </dependency>

2、application.yml配置

# 七牛云 配置
qiniuyun:
  accessKey: ********                #你的accessKey
  secretKey: ********                #你的secretKey
  bucket: test-fawu                  #你的空间名
  domain: http://test.kang****.top/  #刚刚绑定的域名

accesskey和secretKey获取位置,进入密钥管理
在这里插入图片描述

若您没有密钥就点击创建密钥,即可获取accesskey和secretKey

3、创建上传工具类

package com.kang.commons.Util;

import java.io.InputStream;
import java.util.UUID;
import com.google.gson.Gson;
import com.qiniu.common.QiniuException;
import com.qiniu.http.Response;
import com.qiniu.storage.Region;
import com.qiniu.storage.UploadManager;
import com.qiniu.storage.model.DefaultPutRet;
import com.qiniu.util.Auth;
import com.qiniu.util.StringMap;
import com.qiniu.storage.Configuration;
import lombok.experimental.PackagePrivate;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.PropertySource;
import org.springframework.stereotype.Component;


/**
 * @program: kang
 * @description: 七牛云上传图片
 * @author: K
 * @create: 2021-10-25 10:58
 **/
@Component
@PropertySource(value = "classpath:application.yml")
@ConfigurationProperties(prefix = "qiniuyun")
public class QiniuUtil {

    // 设置需要操作的账号的AK和SK
    @Value("${accessKey}")
    private String accessKey;
    @Value("${secretKey}")
    private String secretKey;
    // 要上传的空间
    @Value("${bucket}")
    private String bucket;
    //外链地址
    @Value("${domain}")
    private String domain;

    /**
     * 上传文件并且返回文件地址
     *
     * @param inputStream 文件
     */
    public String setUploadManager(InputStream inputStream) {
        //设置密钥、文件连接、文件名等等属性
        //构造一个带指定 Region 对象的配置类
        Configuration cfg = new Configuration(Region.huanan());
        //...其他参数参考类注释
        UploadManager uploadManager = new UploadManager(cfg);
        //设置连接地址
        Auth auth = Auth.create(accessKey, secretKey);
        String prefix = "";
        int Guid = 100;
        try {
            String s = auth.uploadToken(bucket);
            //生成文件名
            String s1 = UUID.randomUUID().toString().replaceAll("-","");
            //实现文件上传
            Response response = uploadManager.put(inputStream, s1, s, null, null);
            //解析上传成功结果
            DefaultPutRet defaultPutRet = new Gson().fromJson(response.bodyString(), DefaultPutRet.class);
            //返回文件外链地址
            return domain + defaultPutRet.key;
        } catch (QiniuException e) {
            e.printStackTrace();
            return null;
        }
    }
}

4、service层调用

package com.kang.service.impl;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.kang.Vo.PhotoVo;
import com.kang.commons.Util.QiniuUtil;
import com.kang.entity.Photo;
import com.kang.mapper.PhotoMapper;
import com.kang.service.PhotoService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;

import java.io.IOException;
import java.sql.Wrapper;
import java.util.ArrayList;
import java.util.List;

/**
 * @program: photo_fawu
 * @description: 服务层
 * @author: K.faWu
 * @create: 2021-10-25 15:22
 **/

@Service
public class PhotoServiceImpl implements PhotoService {

    @Autowired
    private PhotoMapper photoMapper;
    @Autowired
    private QiniuUtil qiniuUtil;

    @Override
    public String uploadPhoto(MultipartFile file) {
        //文件名
        try {
            String path = qiniuUtil.setUploadManager(file.getInputStream());
            if (path == null){
                throw new Exception("输入的字符不能为空!");
            }
            Photo photo = new Photo();
            //获取文件名
            String originalFilename = file.getOriginalFilename();
            String name = originalFilename.split("\\.")[0];
            photo.setName(name);
            photo.setPath(path);
            photoMapper.insert(photo);
            return path;
        } catch (IOException e) {
            e.printStackTrace();
            return "文件上传失败";
        } catch (Exception e) {
            e.printStackTrace();
            return "文件上传失败";
        }
    }
}

上传功能已实现,其他的逻辑就靠您自己添加了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值