Java实现七牛云上传下载文件或图片
文章目录
- 写在前面
- 一、准备工作
- 1.1.为什么选择七牛云?
- 1.2.七牛云注册
- 二、java操作七牛云对象存储下载
- 2.1.pom.xml引入依赖
- 2.2.上传下载具体代码
- 三、具体业务例子(七牛云做图片服务器–SpringBoot)
- 3.1.pom.xml(此处继承上面的依赖 多引入一个)
- 3.2.创建一个html页面
- 3.3.接下来就是FileUtil.java(判断图片的后缀是否符合要求)
- 3.4.接下来写QiniuService.java
- 3.5.最后是controller
- 3.6.查看七牛云存储结果
- 四、总结
一、准备工作
1.1.为什么选择七牛云?
免费 免费 免费 而且注册之后每个月 有免费100 万 次get请求。
10G免费空间,10G免费流量,对于搭建自己的博客网站已经绰绰有余了。
1.2.七牛云注册
注册七牛云账号
获取自己的AK,SK:
二、java操作七牛云对象存储下载
2.1.pom.xml引入依赖
<!--七牛云上传图片服务--><!-- https://mvnrepository.com/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.qiniu.common.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_KEYString ACCESS_KEY = ""; //这两个登录七牛 账号里面可以找到String SECRET_KEY = "";//要上传的空间String bucketname = ""; //对应要上传到七牛上 你的那个路径(自己建文件夹 注意设置私有)//上传到七牛后保存的文件名//密钥配置Auth auth = Auth.create(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) {Response r = e.response;// 请求失败时打印的异常的信息System.out.println(r.toString());try {//响应的文本信息System.out.println(r.bodyString());} catch (QiniuException e1) {//ignoree.printStackTrace();}}}/*** 获取下载文件路径,即:donwloadUrl** @return*/public String getDownloadUrl(String targetUrl) {String downloadUrl = auth.privateDownloadUrl(targetUrl);return downloadUrl;}/*** 文件下载** @param targetUrl*/public void download(String targetUrl) {//获取downloadUrlString 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 = client.newCall(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 (!file.exists() && !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();}return writer.toByteArray();}public static void main(String args[]) throws IOException {String fileName = "xiao.jpg";//上传文件的路径String FilePath = "C:\\Users\\ChenXiao\\Pictures\\Saved Pictures\\xiao.jpg"; //本地要上传文件路径// new QiniuUtil().upload(FilePath,fileName);//构造私有空间的需要生成的下载的链接;//格式: http://私有空间绑定的域名/空间下的文件名String targetUrl = "http://私有空间绑定的域名/下载文件名称.后缀"new QiniuUtil().download(targetUrl);}}
三、具体业务例子(七牛云做图片服务器–SpringBoot)
3.1.pom.xml(此处继承上面的依赖 多引入一个)
<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 = LoggerFactory.getLogger(QiniuService.class);// 设置好账号的ACCESS_KEY和SECRET_KEYString ACCESS_KEY = "###################";String SECRET_KEY = "###################";// 要上传的空间String bucketname = "####";// 密钥配置Auth auth = Auth.create(ACCESS_KEY, SECRET_KEY);// 构造一个带指定Zone对象的配置类,不同的七云牛存储区域调用不同的zoneConfiguration cfg = new Configuration(Zone.zone0());// ...其他参数参考类注释UploadManager uploadManager = new UploadManager(cfg);// 测试域名,只有30天有效期private static String QINIU_IMAGE_DOMAIN = "http://############/";// 简单上传,使用默认策略,只需要设置上传的空间名就可以了public String getUpToken() {return auth.uploadToken(bucketname);}public String saveImage(MultipartFile file) throws IOException {try {int dotPos = file.getOriginalFilename().lastIndexOf(".");if (dotPos < 0) {return null;}String fileExt = file.getOriginalFilename().substring(dotPos + 1).toLowerCase();// 判断是否是合法的文件后缀if (!FileUtil.isFileAllowed(fileExt)) {return null;}String fileName = UUID.randomUUID().toString().replaceAll("-", "") + "." + fileExt;// 调用put方法上传Response res = uploadManager.put(file.getBytes(), fileName, getUpToken());// 打印返回的信息if (res.isOK() && res.isJson()) {// 返回这张存储照片的地址return QINIU_IMAGE_DOMAIN + JSONObject.parseObject(res.bodyString()).get("key");} else {logger.error("七牛异常:" + res.bodyString());return null;}} catch (QiniuException e) {// 请求失败时打印的异常的信息logger.error("七牛异常:" + e.getMessage());return null;}}
}
这里需要填的地方我都用**#########标注了,要注意的是Zone.zone0()**这个方法,因为你创建的存储空间可能是华北的,华东的或者其他区域的,所以这里可能得调用zone1或者zone2。具体视情况而定。
3.5.最后是controller
@Controller
public class TestController {@Autowiredprivate QiniuService qiniuService;@RequestMapping(value = "/testUpload", method = RequestMethod.POST)@ResponseBodypublic 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整合七牛云上传文件
七牛云存储 七牛云(隶属于上海七牛信息技术有限公司)是国内领先的以视觉智能和数据智能为核心的企业级云计算服务商,同时也是国内知名智能视频云服务商,累计为 70 多万家企业提供服务,覆盖了国内80%网民 ...
- html5视频上传云,vue+七牛云上传视频文件
Qiniu-JavaScript-SDK基于七牛云存储官方 API 构建,其中上传功能基于 H5 File API.开发者基于 JS-SDK 可以方便的从浏览器端上传文件至七牛云存储,并对上传成功后的 ...
- Java通过FTP服务器上传下载文件的方法
本文介绍了如何使用Apache Jakarta Commons Net(commons-net-3.3.jar)基于FileZilla Server服务器实现FTP服务器上文件的上传/下载/删除等操作 ...
- Java获取流形式上传下载文件
废话不多说,直接上代码: 1:pom中添加一下依赖: <!--druid数据源--><dependency><groupId>com.alibaba</gro ...
- java 上传文件及预览_SpringBoot上传下载文件及在线预览
SpringBoot上传下载文件及在线预览 今天大概就说说如何使用SpringBoot进行上传和下载以及在线预览文件 本篇主要介绍上传下载的功能,对于界面就简单一点,大致如下: 一.老规矩还是先看看小 ...
- PHP七牛云上传大视频文件异步存为m3u8格式(包括回调过程)
问题引入 视频的第一帧加载缓慢. 简介 HTTP Live Streaming,缩写为HLS,是由苹果公司提出基于HTTP的流媒体网络传输协议.它的工作原理是把整个流分成一个个小的基于HTTP的文件来 ...
- 七牛云上传文件之表单上传文件
本人愚钝,七牛云上传文件的开发说明文档看了好久才搞懂,才能完成一个实例跑起来.现在做一下总结. 1.注册七牛,新建一个bucket,并获得ak,sk这个不用说了.不涉及到程序编码,重点讲一下编码的流程 ...
- java文件客户端下载_使用Java写一个minio的客户端上传下载文件
标签:color ati tty java system wired format media param 前言: 确保已经安装了minio的服务端 代码: pom.x ...
- java spring mvc 上传_Java Spring MVC 上传下载文件配置及controller方法详解
下载: 1.在spring-mvc中配置(用于100M以下的文件下载) 下载文件代码 @RequestMapping("/file/{name.rp}") public Respo ...
最新文章
- 使用feign调用注解在eureka上的微服务,简单学会微服务
- C语言:随笔11--文件操作
- (C++)1023 组个最小数 简单贪心
- P值(P-value),“差异具有显著性”和“具有显著差异”
- ContestHunter暑假欢乐赛 SRM 08
- 农历控件源码(C#)
- LeetCode 617合并二叉树-简单
- 手机相片删除了怎么恢复? 手机照片恢复方法汇总
- Python基础——mysql数据库、SQLAlchemy
- “System.OutOfMemoryException”类型的异常在 mscorlib.dll 中发生,但未在用户代码中进行处理
- 泽众性能测试软件,软件测试工具-测试管理工具-自动化测试工具-性能测试工具-SPASVO泽众软件测试网...
- WLAN配置实例(二)——三层组网隧道转发
- listview 刷新某一个item
- Python基础-计算时间差,时间和,精确到秒,微秒,毫秒
- 3.3.7 使用difflib.get_close_matches函数
- 大学生搜题软件哪个好?2020搜题软件排行榜
- 萝卜小姐-Handler之系列sendMessage学习
- Bitmovin首席执行官Stefan:开发者正在构建视频产品的未来
- 超声波传感器(CHx01ICU-x0201ICU-30201) - 资源抢先看(资料获取)
- matlab 三角函数 积化和差,三角函数积化和差与和差化积公式
热门文章
- 万马齐喑究可哀-中文编程的又一波quot;讨论quot;
- js调用APP后,如果有App直接进App,没有则进入App下载页面
- c语言流星雨程序下载,c语言 流星雨的实现.doc
- Juphoon RCS年度成绩单,请查收!
- unsigned在c语言中的作用,c语言中unsigned char的意义何在
- 优秀是一种习惯(转)
- TinyMce 修改插件 实现多文件/图片上传
- win10下基于anaconda利用keras开展16系显卡GTX1650的GPU神经网络计算
- 2022-2028年中国铷矿行业市场现状分析及发展前景展望报告
- 【数据库】MySQL的sql语句详解