前言:该文章从注册七牛云到实现代码上传的步骤都有,若您只需要代码,请直接向下划
一、申请七牛云对象存储
申请七牛云对象存储不需要钱,免费使用!!!(我没打广告)
注册七牛云账号后进入 管理控制台
找到存储空间并新建存储空间
输入你的存储空间名,选择存储区域,以及控制访问.确定
二、绑定域名
这时你的存储空间就已经申请好了,它还需要一个访问域名用来访问空间中的内容,开始会送你一个月的域名使用期,等使用期过后你就要绑定域名了
点击绑定域名,后输入你的访问域名
其他选项默认即可
注意这里的加速域名的前缀是可以随便填写的,并不是必须要填写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 "文件上传失败";
}
}
}
上传功能已实现,其他的逻辑就靠您自己添加了