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 七⽜云上传下载内容请搜索以前的⽂章或继续浏览下⾯的相关⽂章希望⼤家以后多多⽀持!
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
JSP中inputtype用法简介
« 上一篇
asp上传文件代码
下一篇 »
推荐文章
热门文章
-
随机森林特征选择原理
2024-10-02 -
自动驾驶系统中的随机森林算法解析
2024-10-02 -
随机森林算法及其在生物信息学中的应用
2024-10-02 -
监督学习中的随机森林算法解析(六)
2024-10-02 -
随机森林算法在数据分析中的应用
2024-10-02 -
机器学习——随机森林,RandomForestClassifier参数含义详解
2024-10-02 -
随机森林 的算法
2024-10-02 -
随机森林算法作用
2024-10-02 -
监督学习中的随机森林算法解析(十)
2024-10-02 -
随机森林算法案例
2024-10-02 -
随机森林案例
2024-10-02 -
二分类问题常用的模型
2024-10-02 -
绘制ssd框架训练流程
2024-10-02 -
一种基于信息熵和DTW的多维时间序列相似性度量算法
2024-10-02 -
SVM训练过程范文
2024-10-02 -
如何使用支持向量机进行股票预测与交易分析
2024-10-02 -
二分类交叉熵损失函数binary
2024-10-02 -
tinybert_训练中文文本分类模型_概述说明
2024-10-02 -
基于门控可形变卷积和分层Transformer的图像修复模型及其应用
2024-10-02 -
人工智能开发技术的测试和评估方法
2024-10-02
最新文章
-
基于随机森林的数据分类算法改进
2024-10-02 -
人工智能中的智能识别与分类技术
2024-10-02 -
基于人工智能技术的随机森林算法在医疗数据挖掘中的应用
2024-10-02 -
随机森林回归模型的建模步骤
2024-10-02 -
r语言随机森林预测模型校准曲线
2024-10-02 -
《2024年随机森林算法优化研究》范文
2024-10-02
发表评论