封装七牛云存储工具类

2023-09-18 10:52:11

封装七牛云存储工具类(为啥选择七牛云?当然是因为它能免费使用喽!!!白嫖怪哈哈哈!!!

图片存储方案

在实际开发中,我们会有很多处理不同功能的服务器。例如:

应用服务器:负责部署我们的应用

数据库服务器:运行我们的数据库

文件服务器:负责存储用户上传文件的服务器
在这里插入图片描述
分服务器处理的目的是让服务器各司其职,从而提高我们项目的运行效率。

常见的图片存储方案:

方案一:使用nginx搭建图片服务器

方案二:使用开源的分布式文件存储系统,例如Fastdfs、HDFS等

方案三:使用云存储,例如阿里云、七牛云等

当我们注册好七牛云之后,就可以导入maven坐标了!

使用Java SDK操作七牛云需要导入如下maven坐标:

<dependency>
  <groupId>com.qiniu</groupId>
  <artifactId>qiniu-java-sdk</artifactId>
  <version>7.2.0</version>
</dependency>

Java SDK操作七牛云

我们就需要使用七牛云提供的Java SDK完成图片上传和删除,我们可以参考官方提供的例子。

下面是官网给出的例子!!!

//构造一个带指定Zone对象的配置类
Configuration cfg = new Configuration(Zone.zone0());
//...其他参数参考类注释
UploadManager uploadManager = new UploadManager(cfg);
//...生成上传凭证,然后准备上传
String accessKey = "your access key";
String secretKey = "your secret key";
String bucket = "your bucket name";
//如果是Windows情况下,格式是 D:\\qiniu\\test.png
String localFilePath = "/home/qiniu/test.png";
//默认不指定key的情况下,以文件内容的hash值作为文件名
String key = null;
Auth auth = Auth.create(accessKey, secretKey);
String upToken = auth.uploadToken(bucket);
try {
    Response response = uploadManager.put(localFilePath, key, upToken);
    //解析上传成功的结果
    DefaultPutRet putRet = new Gson().fromJson(response.bodyString(), DefaultPutRet.class);
    System.out.println(putRet.key);
    System.out.println(putRet.hash);
} catch (QiniuException ex) {
    Response r = ex.response;
    System.err.println(r.toString());
    try {
        System.err.println(r.bodyString());
    } catch (QiniuException ex2) {
        //ignore
    }
}
//构造一个带指定Zone对象的配置类
Configuration cfg = new Configuration(Zone.zone0());
//...其他参数参考类注释

String accessKey = "your access key";
String secretKey = "your secret key";

String bucket = "your bucket name";
String key = "your file key";

Auth auth = Auth.create(accessKey, secretKey);
BucketManager bucketManager = new BucketManager(auth, cfg);
try {
    bucketManager.delete(bucket, key);
} catch (QiniuException ex) {
    //如果遇到异常,说明删除失败
    System.err.println(ex.code());
    System.err.println(ex.response.toString());
}

封装工具类

为了方便操作七牛云存储服务,我们可以将官方提供的案例简单改造成一个工具类,在我们的项目中直接使用此工具类来操作就可以:

package com.itheima.utils;

import com.google.gson.Gson;
import com.qiniu.common.QiniuException;
import com.qiniu.common.Zone;
import com.qiniu.http.Response;
import com.qiniu.storage.BucketManager;
import com.qiniu.storage.Configuration;
import com.qiniu.storage.UploadManager;
import com.qiniu.storage.model.DefaultPutRet;
import com.qiniu.util.Auth;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;

/**
 * 七牛云工具类
 */
public class QiniuUtils {
    public  static String accessKey = "。。。。。。";
    public  static String secretKey = "。。。。。。";
    public  static String bucket = "qiniutest";

    public static void upload2Qiniu(String filePath,String fileName){
        //构造一个带指定Zone对象的配置类
        Configuration cfg = new Configuration(Zone.zone0());//注意时区更换
        UploadManager uploadManager = new UploadManager(cfg);
        Auth auth = Auth.create(accessKey, secretKey);
        String upToken = auth.uploadToken(bucket);
        try {
            Response response = uploadManager.put(filePath, fileName, upToken);
            //解析上传成功的结果
            DefaultPutRet putRet = 
              new Gson().fromJson(response.bodyString(), DefaultPutRet.class);
        } catch (QiniuException ex) {
            Response r = ex.response;
            try {
                System.err.println(r.bodyString());
            } catch (QiniuException ex2) {
                //ignore
            }
        }
    }

    //上传文件
    public static void upload2Qiniu(byte[] bytes, String fileName){
        //构造一个带指定Zone对象的配置类
        Configuration cfg = new Configuration(Zone.zone0());
        //...其他参数参考类注释
        UploadManager uploadManager = new UploadManager(cfg);
        //默认不指定key的情况下,以文件内容的hash值作为文件名
        String key = fileName;
        Auth auth = Auth.create(accessKey, secretKey);
        String upToken = auth.uploadToken(bucket);
        try {
            Response response = uploadManager.put(bytes, key, upToken);
            //解析上传成功的结果
            DefaultPutRet putRet = 
              new Gson().fromJson(response.bodyString(), DefaultPutRet.class);
            System.out.println(putRet.key);
            System.out.println(putRet.hash);
        } catch (QiniuException ex) {
            Response r = ex.response;
            System.err.println(r.toString());
            try {
                System.err.println(r.bodyString());
            } catch (QiniuException ex2) {
                //ignore
            }
        }
    }

    //删除文件
    public static void deleteFileFromQiniu(String fileName){
        //构造一个带指定Zone对象的配置类
        Configuration cfg = new Configuration(Zone.zone0());
        String key = fileName;
        Auth auth = Auth.create(accessKey, secretKey);
        BucketManager bucketManager = new BucketManager(auth, cfg);
        try {
            bucketManager.delete(bucket, key);
        } catch (QiniuException ex) {
            //如果遇到异常,说明删除失败
            System.err.println(ex.code());
            System.err.println(ex.response.toString());
        }
    }
}

将此工具类放在项目common工程中,后续会使用到。
这里需要注意,时区需要更换

Zone.zone0:华东
Zone.zone1:华北
Zone.zone2:华南
Zone.zoneNa0:北美
//———http上传,自动识别上传区域——
Zone.httpAutoZone
//———https上传,自动识别上传区域—— //Zone.httpsAutoZone

更多推荐

Stability AI推出Stable Audio;ChatGPT:推荐系统的颠覆者

🦉AI新闻🚀StabilityAI推出StableAudio,用户可以生成个性化音乐片段摘要:StabilityAI公司发布了一款名为StableAudio的工具,用户可以根据自己的文本内容自动生成音乐或音频。免费版可生成最长20秒音乐片段,Pro订阅用户可生成最长90秒的音频内容。该公司希望这款工具能够激发音乐爱

JS Set和Map数据结构

Set和Map数据结构1.Set数据结构1.1Set增删改查1.1.1add()方法1.1.2delete()1.1.3has()1.1.4clear()1.1.5size1.2Set遍历方法1.2.1keys()1.2.2values()1.2.3entries()1.2.3forEach()2.Map数据类型2.1

最大限度节省采购成本的七种方法

当前经济环境下,降低成本比以往任何时候都更受到企业的重视。降低成本通常是指在采购过程中节省的成本,但其实远不止于此。它还包括通过重新谈判合同条款和条件、改进管理和运营流程,以及数据和技术的智能使用而节省的成本。节省采购成本的七种方法虽然采购成本不可能完全消除,但采购专业人员可以采用一些技巧和方法来减少这些支出。1.重新

【前端知识】Three 学习日志(一)—— Three.js 的简单尝试

Three学习日志(一)——Three.js的简单尝试Three.js是一个使用JavaScript编写的轻量级3D图形库,它可以在浏览器中渲染出3D场景。在学习Three.js的过程中,建立基本场景是一个重要的第一步。通过设置相机、场景和渲染器等组件,可以创建一个简单的3D场景。在建立基本场景之后,可以通过添加模型、

软件需求怎么写?

前言:一般来说,软件产品的需求人员的主要输出物就是软件需求,如果这个软件产品就XX系统,人们口中的“系统需求”和“软件需求”就没有什么区别了。在车企行业,推行这ASPICE体系,在这个体系中明确申请了系统域和软件域,分别定义了系统需求和软件需求,那两者就有一些区别的。笔者作为一个开发转岗的软件需求,下文主要是在项目实战

MyBatis配置文件(mybatis-config.xml)

MyBatis配置文件的结构如下<?xmlversion="1.0"encoding="utf-8"?><!DOCTYPEconfigurationPUBLIC"-//mybatis.org//DTDConfig3.0//EN""http://mybatis.org/dtd/mybatis-3-config.dtd">

xxl-job

xxl-job:定时任务框架:导入xxl-job框架,然后创建一个springboot项目在里面,然后在配置类中写入配置(可以参考xxl-job自带的xxl-job-executor-sample-springboot),然后这里需要手动在web端中的执行器管理中添加(项目名,地址等)bean型:是根据容器中的bean

java 工程管理系统源码+项目说明+功能描述+前后端分离 + 二次开发

Java版工程项目管理系统SpringCloud+SpringBoot+Mybatis+Vue+ElementUI+前后端分离功能清单如下:首页工作台:待办工作、消息通知、预警信息,点击可进入相应的列表项目进度图表:选择(总体或单个)项目显示1、项目进度图表2、项目信息施工地图:1、展示当前角色权限下能看到的施工地图(

DeepWalk实战---Wiki词条图嵌入可视化

DeepWalk是2014年提出的一种Graph中的Node进行Embedding的算法,是首次将自然语言处理领域NLP中的word2vec拓展到了graph。万事万物皆可embedding,所以DeepWalk我感觉在图机器学习中具有非常强的应用价值。1.首先打开AnacondaPrompt(Anaconda),创建

springboot集成kafka

创建工程父工程pom父工程做了子工程管理和包管理<?xmlversion="1.0"encoding="UTF-8"?><projectxmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instanc

R 语言的安装教程

一、下载相关软件1、R下载官网:R:TheRProjectforStatisticalComputing找到中国镜像,下载快历史版本点击这里2、Rtools下载进入镜像后,点击这里然后选择与上面下载的R版本相对应的版本即可3、Rstudio下载官网:Posit|TheOpen-SourceDataScienceComp

热文推荐