Java实现七⽜云⽂件图⽚上传下载⽬录
⼀、准备⼯作
1.1.为什么选择七⽜云?
1.2.七⽜云注册
⼆、java操作七⽜云对象存储下载
2.l引⼊依赖
2.2.上传下载具体代码
三、具体业务例⼦(七⽜云做图⽚服务器–SpringBoot)
四、总结
⼀、准备⼯作
1.1.为什么选择七⽜云?
免费免费免费⽽且注册之后每个⽉有免费100 万次get请求。
10G免费空间,10G免费流量,对于搭建⾃⼰的博客⽹站已经绰绰有余了。
1.2.七⽜云注册
获取⾃⼰的AK,SK:
⼆、java操作七⽜云对象存储下载
2.l引⼊依赖
<!--七⽜云上传图⽚服务-->
<!-- mvnrepository/artifact/com.qiniu/qiniu-java-sdk -->
<dependency>
<groupId>com.qiniu</groupId>
<artifactId>qiniu-java-sdk</artifactId>
<version>7.2.7</version>
</dependency>
2.2.上传下载具体代码
import com.qiniumon.QiniuException;
import com.qiniu.http.Response;
import com.qiniu.storage.UploadManager;
import com.qiniu.util.Auth;
import com.qiniu.util.StringMap;
import com.squareup.okhttp.OkHttpClient;
import com.squareup.okhttp.Request;
import com.squareup.okhttp.ResponseBody;
import java.io.*;
public class QiniuUtil {
//设置好账号的ACCESS_KEY和SECRET_KEY
String ACCESS_KEY = ""; //这两个登录七⽜账号⾥⾯可以到
String SECRET_KEY = "";
//要上传的空间
String bucketname = ""; //对应要上传到七⽜上你的那个路径(⾃⼰建⽂件夹注意设置私有)
//上传到七⽜后保存的⽂件名
//密钥配置
Auth auth = ate(ACCESS_KEY, SECRET_KEY);
/
/创建上传对象
UploadManager uploadManager = new UploadManager();
/**
* 简单上传,使⽤默认策略,只需要设置上传的空间名就可以了
*
* @param fileName ⽂件上传⾄七⽜云空间的名称
* @return
*/
public String getUpToken(String fileName) {
//return auth.uploadToken(bucketname);
//<bucket>:<key>,表⽰只允许⽤户上传指定key的⽂件。在这种格式下⽂件默认允许“修改”,已存在同
名资源则会被本次覆盖。    //如果希望只能上传指定key的⽂件,并且不允许修改,那么可以将下⾯的 insertOnly 属性值设为 1。
//第三个参数是token的过期时间
return auth.uploadToken(bucketname, fileName, 3600, new StringMap().put("insertOnly", 0));
}
/**
* 普通上传
*
* @param filePath ⽂件路径
* @param fileName ⽂件上传⾄七⽜云空间的名称
* @throws IOException
*/
public void upload(String filePath, String fileName) {
try {
//调⽤put⽅法上传
Response res = uploadManager.put(filePath, fileName, getUpToken(fileName));
//打印返回的信息
System.out.println(res.bodyString());
} catch (QiniuException e) {
inputtypefile不上传文件
Response r = e.response;
// 请求失败时打印的异常的信息
System.out.String());
try {
/
/响应的⽂本信息
System.out.println(r.bodyString());
} catch (QiniuException e1) {
//ignore
e.printStackTrace();
}
}
}
/**
* 获取下载⽂件路径,即:donwloadUrl
*
* @return
*/
public String getDownloadUrl(String targetUrl) {
String downloadUrl = auth.privateDownloadUrl(targetUrl);
return downloadUrl;
}
/**
* ⽂件下载
*
* @param targetUrl
*/
public void download(String targetUrl) {
//获取downloadUrl
String downloadUrl = getDownloadUrl(targetUrl);
//本地保存路径
String filePath = "E:\\chen\\";
download(downloadUrl, filePath);
}
/**
* 通过发送http get 请求获取⽂件资源
*
* @param url
* @param filepath
* @return
*/
private static void download(String url, String filepath) {
OkHttpClient client = new OkHttpClient();
System.out.println(url);
Request req = new Request.Builder().url(url).build();
com.squareup.okhttp.Response resp = null;
try {
resp = wCall(req).execute();
System.out.println(resp.isSuccessful());
if (resp.isSuccessful()) {
ResponseBody body = resp.body();
InputStream is = body.byteStream();
byte[] data = readInputStream(is);
//判断⽂件夹是否存在,不存在则创建
File file = new File(filepath);
if (!ists() && !file.isDirectory()) {
System.out.println("===⽂件夹不存在===创建====");
file.mkdir();
}
File imgFile = new File(filepath + "888.jpg");
FileOutputStream fops = new FileOutputStream(imgFile);
fops.write(data);
fops.close();
}
} catch (IOException e) {
e.printStackTrace();
System.out.println("Unexpected code " + resp);
}
}
/**
* 读取字节输⼊流内容
*
* @param is
* @return
*/
private static byte[] readInputStream(InputStream is) {
ByteArrayOutputStream writer = new ByteArrayOutputStream();
byte[] buff = new byte[1024 * 2];
int len = 0;
try {
while ((len = is.read(buff)) != -1) {
writer.write(buff, 0, len);
}
is.close();
} catch (IOException e) {
e.printStackTrace();
}
ByteArray();
}
public static void main(String args[]) throws IOException {
String fileName = "xiao.jpg";
//上传⽂件的路径
String FilePath = "C:\\Users\\ChenXiao\\Pictures\\Saved Pictures\ iao.jpg";  //本地要上传⽂件路径
/
/ new QiniuUtil().upload(FilePath,fileName);
//构造私有空间的需要⽣成的下载的链接;
//格式: 私有空间绑定的域名/空间下的⽂件名
String targetUrl = "私有空间绑定的域名/下载⽂件名称.后缀"
new QiniuUtil().download(targetUrl);
}
}
三、具体业务例⼦(七⽜云做图⽚服务器–SpringBoot)
3.l(此处继承上⾯的依赖多引⼊⼀个)
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.31</version>
</dependency>
<dependency>
<groupId>com.qiniu</groupId>
<artifactId>qiniu-java-sdk</artifactId>
<version>7.2.7</version>
</dependency>
3.2.创建⼀个html页⾯
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<form action="/testUpload" method="post" enctype="multipart/form-data">
<input type="file" name="file" />
<button type="submit">上传</button>
</form>
</body>
</html>
最简单原始。但这⾥还是有两个注意的地⽅,⼀个是method属性,⼀个是enctype属性。
3.3.接下来就是FileUtil.java(判断图⽚的后缀是否符合要求)
public class FileUtil {
// 图⽚允许的后缀扩展名
public static String[] IMAGE_FILE_EXTD = new String[] { "png", "bmp", "jpg", "jpeg","pdf" };
public static boolean isFileAllowed(String fileName) {
for (String ext : IMAGE_FILE_EXTD) {
if (ext.equals(fileName)) {
return true;
}
}
return false;
}
}
3.4.接下来写QiniuService.java
@Service
public class QiniuService {
private static final Logger logger = Logger(QiniuService.class);
// 设置好账号的ACCESS_KEY和SECRET_KEY
String ACCESS_KEY = ">>>####";
String SECRET_KEY = ">>>####";
// 要上传的空间
String bucketname = "####";
/
/ 密钥配置
Auth auth = ate(ACCESS_KEY, SECRET_KEY);
// 构造⼀个带指定Zone对象的配置类,不同的七云⽜存储区域调⽤不同的zone
Configuration cfg = new 0());
// ...其他参数参考类注释
UploadManager uploadManager = new UploadManager(cfg);
// 测试域名,只有30天有效期
private static String QINIU_IMAGE_DOMAIN = ">>##/";
// 简单上传,使⽤默认策略,只需要设置上传的空间名就可以了
public String getUpToken() {
return auth.uploadToken(bucketname);
}
public String saveImage(MultipartFile file) throws IOException {
try {
int dotPos = OriginalFilename().lastIndexOf(".");
if (dotPos < 0) {
return null;
}
String fileExt = OriginalFilename().substring(dotPos + 1).toLowerCase();
// 判断是否是合法的⽂件后缀
if (!FileUtil.isFileAllowed(fileExt)) {
return null;
}
String fileName = UUID.randomUUID().toString().replaceAll("-", "") + "." + fileExt;
// 调⽤put⽅法上传
Response res = uploadManager.Bytes(), fileName, getUpToken());
// 打印返回的信息
if (res.isOK() && res.isJson()) {
// 返回这张存储照⽚的地址
return QINIU_IMAGE_DOMAIN + JSONObject.parseObject(res.bodyString()).get("key");
} else {
<("七⽜异常:" + res.bodyString());
return null;
}
} catch (QiniuException e) {
// 请求失败时打印的异常的信息
<("七⽜异常:" + e.getMessage());
return null;
}
}
}
这⾥需要填的地⽅我都⽤**>####标注了,要注意的是0()**这个⽅法,因为你创建的存储空间可能是华北的,华东的或者其他区域的,所以这⾥可能得调⽤zone1或者zone2。具体视情况⽽定。
3.5.最后是controller
@Controller
public class TestController {
@Autowired
private QiniuService qiniuService;
@RequestMapping(value = "/testUpload", method = RequestMethod.POST)
@ResponseBody
public String uploadImage(@RequestParam("file") MultipartFile file,HttpServletRequest request) {
if(file.isEmpty()) {
return "error";
}
try {
String fileUrl=qiniuService.saveImage(file);
return "success, imageUrl = " + fileUrl;
} catch (IOException e) {
e.printStackTrace();
}
return "fail";
}
}
上传成功,则返回图⽚的地址。
启动SpringBoot项⽬,输⼊地址
选择⼀张图⽚点击上传,发现返回success和图⽚的url。
3.6.查看七⽜云存储结果
四、总结
总体下来我们会发现七⽜云整体使⽤下来基本不需要什么配置还是⽐较好⽤的⼤⽂件云存储此外还有amazon的s3云服务都是⽬前⽐较主流的⽂件存储⽅案当然还有MongoDB的GridFS也是⼀种⼤型⽂件存储⽅式之⼀,有其⼀定的使⽤场景,务必根据实际场景选择技术⽅案
到此这篇关于Java实现七⽜云⽂件图⽚上传下载的⽂章就介绍到这了,更多相关Java 七⽜云上传下载内容请搜索以前的⽂章或继续浏览下⾯的相关⽂章希望⼤家以后多多⽀持!

发表评论