文章目录

  • 写在前面
  • 一、准备工作
    • 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实现七牛云上传下载文件或图片相关推荐

  1. java整合七牛云上传文件

    七牛云存储 七牛云(隶属于上海七牛信息技术有限公司)是国内领先的以视觉智能和数据智能为核心的企业级云计算服务商,同时也是国内知名智能视频云服务商,累计为 70 多万家企业提供服务,覆盖了国内80%网民 ...

  2. html5视频上传云,vue+七牛云上传视频文件

    Qiniu-JavaScript-SDK基于七牛云存储官方 API 构建,其中上传功能基于 H5 File API.开发者基于 JS-SDK 可以方便的从浏览器端上传文件至七牛云存储,并对上传成功后的 ...

  3. Java通过FTP服务器上传下载文件的方法

    本文介绍了如何使用Apache Jakarta Commons Net(commons-net-3.3.jar)基于FileZilla Server服务器实现FTP服务器上文件的上传/下载/删除等操作 ...

  4. Java获取流形式上传下载文件

    废话不多说,直接上代码: 1:pom中添加一下依赖: <!--druid数据源--><dependency><groupId>com.alibaba</gro ...

  5. java 上传文件及预览_SpringBoot上传下载文件及在线预览

    SpringBoot上传下载文件及在线预览 今天大概就说说如何使用SpringBoot进行上传和下载以及在线预览文件 本篇主要介绍上传下载的功能,对于界面就简单一点,大致如下: 一.老规矩还是先看看小 ...

  6. PHP七牛云上传大视频文件异步存为m3u8格式(包括回调过程)

    问题引入 视频的第一帧加载缓慢. 简介 HTTP Live Streaming,缩写为HLS,是由苹果公司提出基于HTTP的流媒体网络传输协议.它的工作原理是把整个流分成一个个小的基于HTTP的文件来 ...

  7. 七牛云上传文件之表单上传文件

    本人愚钝,七牛云上传文件的开发说明文档看了好久才搞懂,才能完成一个实例跑起来.现在做一下总结. 1.注册七牛,新建一个bucket,并获得ak,sk这个不用说了.不涉及到程序编码,重点讲一下编码的流程 ...

  8. java文件客户端下载_使用Java写一个minio的客户端上传下载文件

    标签:color   ati   tty   java   system   wired   format   media   param 前言: 确保已经安装了minio的服务端 代码: pom.x ...

  9. java spring mvc 上传_Java Spring MVC 上传下载文件配置及controller方法详解

    下载: 1.在spring-mvc中配置(用于100M以下的文件下载) 下载文件代码 @RequestMapping("/file/{name.rp}") public Respo ...

最新文章

  1. 使用feign调用注解在eureka上的微服务,简单学会微服务
  2. C语言:随笔11--文件操作
  3. (C++)1023 组个最小数 简单贪心
  4. P值(P-value),“差异具有显著性”和“具有显著差异”
  5. ContestHunter暑假欢乐赛 SRM 08
  6. 农历控件源码(C#)
  7. LeetCode 617合并二叉树-简单
  8. 手机相片删除了怎么恢复? 手机照片恢复方法汇总
  9. Python基础——mysql数据库、SQLAlchemy
  10. “System.OutOfMemoryException”类型的异常在 mscorlib.dll 中发生,但未在用户代码中进行处理
  11. 泽众性能测试软件,软件测试工具-测试管理工具-自动化测试工具-性能测试工具-SPASVO泽众软件测试网...
  12. WLAN配置实例(二)——三层组网隧道转发
  13. listview 刷新某一个item
  14. Python基础-计算时间差,时间和,精确到秒,微秒,毫秒
  15. 3.3.7 使用difflib.get_close_matches函数
  16. 大学生搜题软件哪个好?2020搜题软件排行榜
  17. 萝卜小姐-Handler之系列sendMessage学习
  18. Bitmovin首席执行官Stefan:开发者正在构建视频产品的未来
  19. 超声波传感器(CHx01ICU-x0201ICU-30201) - 资源抢先看(资料获取)
  20. matlab 三角函数 积化和差,三角函数积化和差与和差化积公式

热门文章

  1. 万马齐喑究可哀-中文编程的又一波quot;讨论quot;
  2. js调用APP后,如果有App直接进App,没有则进入App下载页面
  3. c语言流星雨程序下载,c语言 流星雨的实现.doc
  4. Juphoon RCS年度成绩单,请查收!
  5. unsigned在c语言中的作用,c语言中unsigned char的意义何在
  6. 优秀是一种习惯(转)
  7. TinyMce 修改插件 实现多文件/图片上传
  8. win10下基于anaconda利用keras开展16系显卡GTX1650的GPU神经网络计算
  9. 2022-2028年中国铷矿行业市场现状分析及发展前景展望报告
  10. 【数据库】MySQL的sql语句详解