写在前面
七牛云上传图片的文章不在少数,但他们只是使用了七牛云给的测试域名,作为一个站长把自己的域名升级为https之后,强迫症患者是不允许浏览器出现不安全这三个字的,当然了使用七牛云绑定自己域名时也会出现一些小坑。为了更好的维护自己的网站,对众人来说不一定是完美的,但尽力做到最好的!
准备工作
- 因为我的个人服务器是阿里云的,所以我在我的阿里云上申请了一个二级域名(阿里云二级域名如何申请:点这里)
- 再次二级域名申请完成之后,需要购买一个ssl证书,阿里云有免费证书再申请一个即可!
- 并且下载ssl证书!(不需要Nginx等配置。)
七牛云配置
新建存储空间
空间名称可以自定义,访问控制选择公开。
此时你就新建完成了。
配置域名
上传https证书,一级域名证书,二级域名证书首先要上传到七牛云上。
空间管理里点击域名即可配置域名,首先绑定一级域名,再新绑定二级域名,绑定完成如下。
当然此处有坑,如果不进行cname,会出现如下问题。
如果直接在一级域名cname,也就是在阿里云新建一个cname,记录值和-A一直,那么就会冲突。如果直接修改-A那么就会出现如下问题。
所以才需要一个二级域名!
代码实现
pom引入jar包
<!--七牛服务器-->
<dependency>
<groupId>com.qiniu</groupId>
<artifactId>qiniu-java-sdk</artifactId>
<version>7.2.11</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>com.squareup.okhttp3</groupId>
<artifactId>okhttp</artifactId>
<version>3.3.1</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.6.2</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>com.qiniu</groupId>
<artifactId>happy-dns-java</artifactId>
<version>0.1.4</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>com.squareup.okhttp3</groupId>
<artifactId>okhttp</artifactId>
<version>3.3.1</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.6.2</version>
<scope>compile</scope>
</dependency>
<!-- 请求头参数分析包 -->
<dependency>
<groupId>eu.bitwalker</groupId>
<artifactId>UserAgentUtils</artifactId>
<version>1.20</version>
</dependency>
<!--七牛云上传图片服务-->
<dependency>
<groupId>com.qiniu</groupId>
<artifactId>sdk</artifactId>
<version>6.1.0</version>
</dependency>
配置SDK
这个sdk在你七牛云的秘钥管理下就有
/**
* 类作用描述:命名类
* 创建时间:2018/12/1 17:54
* 构造方法参数:
* 修改时间:2018/12/1 17:54
* 创建者:ZENG
* 类全限定名称:com.hyxiaojingyu.common.VariableName
**/
public class QiNiuSdk {
// 七牛AK
public static final String accessKey = "ak";
// 七牛SK
public static final String secretKey = "sk";
// 七牛存储空间名
public static final String bucket = "空间名";
// 七牛默认域名
public static final String domain = "二级域名";
}
代码实现
/**
* 类作用描述:上传图片到服务器
* 创建时间:2018/12/1 17:54
* 构造方法参数:
* 修改时间:2018/12/1 17:54
* 创建者:ZENG
* 类全限定名称:com.hyxiaojingyu.common.QiniuUpload
**/
public class QiniuUpload {
//设置好账号的ACCESS_KEY和SECRET_KEY
private static String ACCESS_KEY = QiNiuSdk.accessKey; //这两个登录七牛 账号里面可以找到
private static String SECRET_KEY = QiNiuSdk.secretKey;
//要上传的空间
private static String bucketname = QiNiuSdk.bucket; //对应要上传到七牛上 你的那个路径(自己建文件夹 注意设置公开)
//密钥配置
private static Auth auth = Auth.create(ACCESS_KEY, SECRET_KEY);
private static Configuration cfg = new Configuration(Zone.huanan());
//创建上传对象
private static UploadManager uploadManager = new UploadManager(cfg);
//简单上传,使用默认策略,只需要设置上传的空间名就可以了
public static String getUpToken(){
return auth.uploadToken(bucketname);
}
public static String UploadPic(String FilePath,String FileName){
Configuration cfg = new Configuration(Zone.huanan());
UploadManager uploadManager = new UploadManager(cfg);
String accessKey = QiNiuSdk.accessKey; //AccessKey的值
String secretKey = QiNiuSdk.secretKey; //SecretKey的值
String bucket = QiNiuSdk.bucket; //存储空间名
Auth auth = Auth.create(accessKey, secretKey);
String upToken = auth.uploadToken(bucket);
try {
Response response = uploadManager.put(FilePath, FileName, upToken);
//解析上传成功的结果
DefaultPutRet putRet = new Gson().fromJson(response.bodyString(), DefaultPutRet.class);
System.out.println(putRet.key);
System.out.println(putRet.hash);
return QiNiuSdk.domain+FileName;
}catch (QiniuException ex){
Response r = ex.response;
System.err.println(r.toString());
try {
System.err.println(r.bodyString());
} catch (QiniuException ex2) {
//ignore
}
}
return null;
}
public static String updateFile(MultipartFile file, String filename) throws Exception {
//默认不指定key的情况下,以文件内容的hash值作为文件名
try {
InputStream inputStream=file.getInputStream();
ByteArrayOutputStream swapStream = new ByteArrayOutputStream();
byte[] buff = new byte[600]; //buff用于存放循环读取的临时数据
int rc = 0;
while ((rc = inputStream.read(buff, 0, 100)) > 0) {
swapStream.write(buff, 0, rc);
}
byte[] uploadBytes = swapStream.toByteArray();
try {
com.qiniu.http.Response response = uploadManager.put(uploadBytes,filename,getUpToken());
//解析上传成功的结果
DefaultPutRet putRet;
putRet = new Gson().fromJson(response.bodyString(), DefaultPutRet.class);
return QiNiuSdk.domain+putRet.key;
} catch (QiniuException ex) {
Response r = ex.response;
System.err.println(r.toString());
try {
System.err.println(r.bodyString());
} catch (QiniuException ex2) {
}
}
} catch (UnsupportedEncodingException ex) {
}
return null;
}
}
@ResponseBody
@PostMapping("/upload")
public HashMap<String, Object> uploadImageByCover(MultipartFile file){
HashMap<String,Object> result = new HashMap<>();
try {
// 获取文件名称
String fileName = file.getOriginalFilename();
//结果 2017/03/01
String format = DateUtil.format(new Date(), "yyyy-MM-dd-HH-mm-ss");
String newFilename = format+"-"+fileName;
String s = QiniuUpload.updateFile(file, newFilename);
result.put("msg",s);
} catch (Exception e) {
e.printStackTrace();
}
return result;
}
测试
加入我们群
如果有需要,欢迎可以加入我们的QQ群!(QQ搜索 816175200,加入我们的QQ群吧!)
有任何问题,也可以加入我们的QQ群,欢迎交(che)流(dan)!也欢迎参观我的博客www.aquestian.cn!!