Java实现七牛云文件或图片上传下载_七牛云上传下载连接接口(1)

一、准备工作

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\_KEY
  String 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) {
        //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 = 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\_KEY
    String ACCESS_KEY = "###################";
    String SECRET_KEY = "###################";
    // 要上传的空间
    String bucketname = "####";

    // 密钥配置
    Auth auth = Auth.create(ACCESS_KEY, SECRET_KEY);
    // 构造一个带指定Zone对象的配置类,不同的七云牛存储区域调用不同的zone
    Configuration 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(".");


### 如何自学黑客&网络安全


#### 黑客零基础入门学习路线&规划


**初级黑客**  
 **1、网络安全理论知识(2天)**  
 ①了解行业相关背景,前景,确定发展方向。  
 ②学习网络安全相关法律法规。  
 ③网络安全运营的概念。  
 ④等保简介、等保规定、流程和规范。(非常重要)


**2、渗透测试基础(一周)**  
 ①渗透测试的流程、分类、标准  
 ②信息收集技术:主动/被动信息搜集、Nmap工具、Google Hacking  
 ③漏洞扫描、漏洞利用、原理,利用方法、工具(MSF)、绕过IDS和反病毒侦察  
 ④主机攻防演练:MS17-010、MS08-067、MS10-046、MS12-20等


**3、操作系统基础(一周)**  
 ①Windows系统常见功能和命令  
 ②Kali Linux系统常见功能和命令  
 ③操作系统安全(系统入侵排查/系统加固基础)


**4、计算机网络基础(一周)**  
 ①计算机网络基础、协议和架构  
 ②网络通信原理、OSI模型、数据转发流程  
 ③常见协议解析(HTTP、TCP/IP、ARP等)  
 ④网络攻击技术与网络安全防御技术  
 ⑤Web漏洞原理与防御:主动/被动攻击、DDOS攻击、CVE漏洞复现


**5、数据库基础操作(2天)**  
 ①数据库基础  
 ②SQL语言基础  
 ③数据库安全加固


**6、Web渗透(1周)**  
 ①HTML、CSS和JavaScript简介  
 ②OWASP Top10  
 ③Web漏洞扫描工具  
 ④Web渗透工具:Nmap、BurpSuite、SQLMap、其他(菜刀、漏扫等)  
 恭喜你,如果学到这里,你基本可以从事一份网络安全相关的工作,比如渗透测试、Web 渗透、安全服务、安全分析等岗位;如果等保模块学的好,还可以从事等保工程师。薪资区间6k-15k


到此为止,大概1个月的时间。你已经成为了一名“脚本小子”。那么你还想往下探索吗?


如果你想要入坑黑客&网络安全,笔者给大家准备了一份:282G全网最全的网络安全资料包评论区留言即可领取!


**7、脚本编程(初级/中级/高级)**  
 在网络安全领域。是否具备编程能力是“脚本小子”和真正黑客的本质区别。在实际的渗透测试过程中,面对复杂多变的网络环境,当常用工具不能满足实际需求的时候,往往需要对现有工具进行扩展,或者编写符合我们要求的工具、自动化脚本,这个时候就需要具备一定的编程能力。在分秒必争的CTF竞赛中,想要高效地使用自制的脚本工具来实现各种目的,更是需要拥有编程能力.


如果你零基础入门,笔者建议选择脚本语言Python/PHP/Go/Java中的一种,对常用库进行编程学习;搭建开发环境和选择IDE,PHP环境推荐Wamp和XAMPP, IDE强烈推荐Sublime;·Python编程学习,学习内容包含:语法、正则、文件、 网络、多线程等常用库,推荐《Python核心编程》,不要看完;·用Python编写漏洞的exp,然后写一个简单的网络爬虫;·PHP基本语法学习并书写一个简单的博客系统;熟悉MVC架构,并试着学习一个PHP框架或者Python框架 (可选);·了解Bootstrap的布局或者CSS。

**8、超级黑客**  
 这部分内容对零基础的同学来说还比较遥远,就不展开细说了,附上学习路线。  
 ![img](https://img-blog.csdnimg.cn/img_convert/3fd39c2ba8ec22649979f245f4221608.webp?x-oss-process=image/format,png)


#### 网络安全工程师企业级学习路线


![img](https://img-blog.csdnimg.cn/img_convert/931ac5ac21a22d230645ccf767358997.webp?x-oss-process=image/format,png)  
 如图片过大被平台压缩导致看不清的话,评论区点赞和评论区留言获取吧。我都会回复的


视频配套资料&国内外网安书籍、文档&工具


当然除了有配套的视频,同时也为大家整理了各种文档和书籍资料&工具,并且已经帮大家分好类了。

![img](https://img-blog.csdnimg.cn/img_convert/153b2778a3fe5198265bed9635d63469.webp?x-oss-process=image/format,png)  
 一些笔者自己买的、其他平台白嫖不到的视频教程。  
 ![img](https://img-blog.csdnimg.cn/img_convert/32eb4b22aa740233c5198d3c161b37e8.webp?x-oss-process=image/format,png)



  • 7
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值