七牛云对象存储
作者:互联网
七牛云对象存储
在实际开发中,遇到文件上传、下载这是无可避免的,但是文件上传到本地,就占用本地资源,这样就会影响性能,所有可以把文件上传到指定服务器,这里就可以使用七牛云对象存储,把图片视频存储到七牛云,需要使用就使用外链地址直接可以访问
开始
这两处需要记录一下,在后面开发需要使用
参考官方文件进行开发文件上传
https://developer.qiniu.com/kodo/sdk/1239/java#1
安装
使用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>
鉴权
键查密钥管理是否有,参考第一张图片
文件上传
在第一张图片中指定了密钥、地区,在实现文件上传的时候就需要指定地区了,地区分为华东、华北、华南、北美、东南亚
机房 | Region |
---|---|
华东 | Region.region0() , Region.huadong() |
华北 | Region.region1() , Region.huabei() |
华南 | Region.region2() , Region.huanan() |
北美 | Region.regionNa0() , Region.beimei() |
东南亚 | Region.regionAs0() , Region.xinjiapo() |
- 若不指定
Region
或Region.autoRegion()
,则会使用 自动判断 区域,使用相应域名处理。
编写文件上传工具类
application.properties
qiniuyun.accessKey=
qiniuyun.secretKey=
#设置对象存储名称
qiniuyun.bucket=storage-images-sunweijie
#图片外链地址前缀,用于显示图片
qiniuyun.OuterChain=http://qll7sx8y9.hn-bkt.clouddn.com/
工具类:
package com.swj.util;
import com.google.gson.Gson;
import com.qiniu.common.QiniuException;
import com.qiniu.http.Response;
import com.qiniu.storage.Configuration;
import com.qiniu.storage.Region;
import com.qiniu.storage.UploadManager;
import com.qiniu.storage.model.DefaultPutRet;
import com.qiniu.util.Auth;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import java.io.InputStream;
import java.util.UUID;
/**
* 文件上传工具类
*/
@Component
@org.springframework.context.annotation.Configuration
public class UploadFileUtil {
@Value("${qiniuyun.accessKey}")
private String accessKey;
@Value("${qiniuyun.secretKey}")
private String secretKey;
@Value("${qiniuyun.bucket}")
private String bucket;
@Value("${qiniuyun.OuterChain}")
private String OuterChain;
/**
* 上传文件并且返回文件地址
*
* @param inputStream 文件
*/
public void 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();
//实现文件上传
Response response = uploadManager.put(inputStream, s1, s, null, null);
//解析上传成功结果
DefaultPutRet defaultPutRet = new Gson().fromJson(response.bodyString(), DefaultPutRet.class);
System.out.println("文件外链地址:" + OuterChain + defaultPutRet.key);
System.out.println("defaultPutRet.hash = " + defaultPutRet.hash);
} catch (QiniuException e) {
System.out.println("e.getMessage() = " + e.getMessage());
e.printStackTrace();
}
}
}
Controller
package com.swj.controller;
import com.swj.util.UpdateFileUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.Arrays;
import java.util.List;
@Controller
public class uploadController {
@Autowired
private UploadFileUtil upload;
//跳转到index
@GetMapping("/")
public String getIndex() {
return "index";
}
@PostMapping("/upload")
public void upload(@RequestParam("file") MultipartFile file, HttpServletRequest request, HttpServletResponse response) {
//获取文件名
String originalFilename = file.getOriginalFilename();
String endName = originalFilename.split("\\.")[1];
String name = endName.toLowerCase();
//判断是否是指定类
List<String> fileType = Arrays.asList("gif", "jpg", "jfif", "ico", "png", "bmp", "svg");
if (!fileType.contains(name)) {
System.out.println("文件类型错误");
}
//文件名
try {
upload.setUploadManager(file.getInputStream());
System.out.println(" 文件上传成功 ");
} catch (IOException e) {
System.out.println(" 文件上传失败 ");
e.printStackTrace();
}
}
}
html页面
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<form action="/upload" method="post" enctype="multipart/form-data">
<input type="file" name="file" id="">
<input type="submit" value="添加">
</form>
<img src="http://qll7sx8y9.hn-bkt.clouddn.com/0b17dfce-5840-4f5c-8d52-627d8e12eb45"
style="width: 500px;height: 400px;"
alt="">
</body>
</html>
总结:这些在官方文档中都是有写的,我们可以根据一下代码自己编写一个工具类:https://developer.qiniu.com/kodo/sdk/1239/java#upload-file
//构造一个带指定 Region 对象的配置类
Configuration cfg = new Configuration(Region.region0());
//...其他参数参考类注释
UploadManager uploadManager = new UploadManager(cfg);
//...生成上传凭证,然后准备上传
String accessKey = "your access key";
String secretKey = "your secret key";
String bucket = "your bucket name";
//如果是Windows情况下,格式是 D:\\qiniu\\test.png
String localFilePath = "/home/qiniu/test.png";
//默认不指定key的情况下,以文件内容的hash值作为文件名
String key = null;
Auth auth = Auth.create(accessKey, secretKey);
String upToken = auth.uploadToken(bucket);
try {
Response response = uploadManager.put(localFilePath, key, upToken);
//解析上传成功的结果
DefaultPutRet putRet = new Gson().fromJson(response.bodyString(), DefaultPutRet.class);
System.out.println(putRet.key);
System.out.println(putRet.hash);
} catch (QiniuException ex) {
Response r = ex.response;
System.err.println(r.toString());
try {
System.err.println(r.bodyString());
} catch (QiniuException ex2) {
//ignore
}
}
标签:存储,七牛云,String,对象,上传,Region,qiniu,import,com 来源: https://blog.csdn.net/qq_41498751/article/details/111467645