AmazonS3部署以及nacos配置参数

AmazonS3部署

因为涉及到做的需求的头像的处理,所以需要去找头像的来源,没想到又是我们的老熟人,AmazonS3,巧了已经是第二次用了,上次我是用的别人的工具类去干的,这一次我这边自己编辑具体工具类型。
对应的依赖

        <dependency>
            <groupId>com.amazonaws</groupId>
            <artifactId>aws-java-sdk-s3</artifactId>
            <version>1.11.358</version>
        </dependency>
        

具体的工具类

import com.amazonaws.ClientConfiguration;
import com.amazonaws.Protocol;
import com.amazonaws.auth.AWSCredentials;
import com.amazonaws.auth.BasicAWSCredentials;
import com.amazonaws.regions.RegionUtils;
import com.amazonaws.services.s3.AmazonS3;
import com.amazonaws.services.s3.AmazonS3Client;
import com.amazonaws.services.s3.model.*;
import lombok.extern.slf4j.Slf4j;


import javax.servlet.http.HttpServletResponse;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLEncoder;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@Slf4j
public class AmazonS3FileUtils {

	private static String bucketName = null;
    private static String endPoint = null;
    private static String region = null;
    private static String accessKey = null;
    private static String secretKey = null;

    public AmazonS3FileUtils(String bucketName1, String endPoint1, String region1, String accessKey1, String secretKey1) {
        log.info("AmazonS3FileUtils");
        bucketName = bucketName1;
        endPoint = endPoint1;
        region = region1;
        accessKey = accessKey1;
        secretKey = secretKey1;
    }

    private static AmazonS3 getClient() {

        try {
            log.error("getClient start");
            // 新建一个凭证
            log.error("accessKey:"+accessKey);
            log.error("secretKey:"+secretKey);
            AWSCredentials credentials = new BasicAWSCredentials(accessKey, secretKey);
            ClientConfiguration clientConfig = new ClientConfiguration();
            clientConfig.setProtocol(Protocol.HTTP);
            AmazonS3 conn = new AmazonS3Client(credentials, clientConfig);
            log.error("conn:"+conn.toString());
            log.error("endPoint:"+endPoint);
            conn.setEndpoint(endPoint);
            //if(!StringUtils.isNull(region)) {
            //}
            return conn;
        } catch (Exception e) {
            log.error("getClient失败", e.getMessage());
            log.error(e.toString());
            return null;
        }
    }

    public static boolean upload(InputStream inputStream, String fileName) {
        AmazonS3 conn = getClient();
        try {
            Bucket bucket = new Bucket(bucketName);
            ObjectMetadata om1 = new ObjectMetadata();
            om1.setContentLength(inputStream.available());
            PutObjectResult pb = conn.putObject(bucket.getName(), fileName, inputStream, om1);
            List<Map<String, Object>> list = list(fileName);
            if (list.size() > 0) {
                return true;
            }
            return false;
        } catch (Exception e) {
            log.error("AmazonS3FileUtils失败", e.getMessage());
            return false;
        }
    }

    public static List<Map<String, Object>> list(String fileName) {
        AmazonS3 conn = getClient();
        try {
            List<Bucket> buckets = conn.listBuckets();
            List<Map<String, Object>> files = new ArrayList<Map<String, Object>>();
            // 列出 bucket 的内容
            ObjectListing objects;
            if (fileName != null && !"".equals(fileName)) {
                objects = conn.listObjects(bucketName, fileName);
            } else {
                objects = conn.listObjects(bucketName);
            }
            do {
                for (S3ObjectSummary objectSummary : objects.getObjectSummaries()) {
                    Map map = new HashMap();
                    map.put("fileName", objectSummary.getKey());
                    map.put("fileSize", objectSummary.getSize());
//                    map.put("createTime",StringUtils.fromDate(objectSummary.getLastModified()));
                    files.add(map);
//                    System.out.println(objectSummary.getKey() + "\t" +
//                            objectSummary.getSize());
                }
                objects = conn.listNextBatchOfObjects(objects);
            } while (objects.isTruncated());
            return files;
        } catch (Exception e) {
            log.error("AmazonS3FileUtils失败", e.getMessage());
            return null;
        }
    }


    public static URL download(String fileName) {
        AmazonS3 conn = getClient();
        try {
            Bucket bucket = new Bucket(bucketName);
            // 生成对象的下载 URLs (带签名和不带签名),java仅支持带签名的
            GeneratePresignedUrlRequest request = new GeneratePresignedUrlRequest(bucket.getName(), fileName);
            System.out.println(conn.generatePresignedUrl(request));
            return conn.generatePresignedUrl(request);
        } catch (Exception e) {
            log.error("AmazonS3FileUtils失败", e.getMessage());
            return null;
        }
    }

    public static byte[] downloadInputStream(String fileName) {
        try {
            byte[] bytes = downLoadFromUrl(download(fileName).toString());
            return bytes;
        } catch (Exception e) {
            log.error("AmazonS3FileUtils失败", e.getMessage());
            return null;
        }
    }

    public static boolean delete(String fileName) {
        AmazonS3 conn = getClient();
        try {
            Bucket bucket = new Bucket(bucketName);
            conn.deleteObject(bucket.getName(), fileName);
            return true;
        } catch (Exception e) {
            log.error("AmazonS3FileUtils失败", e.getMessage());
            return false;
        }
    }

    public static void downloadFile(String fileName, OutputStream ouputStream) {
        AmazonS3 conn = getClient();
        InputStream input = null;
        try {
            Bucket bucket = new Bucket(bucketName);
            GetObjectRequest gor = new GetObjectRequest(bucket.getName(), fileName);
            S3Object object = conn.getObject(gor);
            input = object.getObjectContent();
            byte[] data = new byte[input.available()];
            System.out.println(data);
            int len = 0;
            while ((len = input.read(data)) != -1) {
                ouputStream.write(data, 0, len);
            }
            System.out.println("下载文件成功");
        } catch (Exception e) {
            log.error("AmazonS3FileUtils失败", e.getMessage());
        } finally {
            if (ouputStream != null) {
                try {
                    ouputStream.close();
                } catch (IOException e) {
                    log.error("AmazonS3FileUtils失败", e.getMessage());
                }
            }
            if (input != null) {
                try {
                    input.close();
                } catch (IOException e) {
                    log.error("AmazonS3FileUtils失败", e.getMessage());
                }
            }
        }
    }


    /**
     *
     * @param fileName
     * @param response
     * @param oldFileName
     */
    public static void amazonS3Downloading(String fileName, HttpServletResponse response, String oldFileName) {
        AmazonS3 conn = getClient();
        Bucket bucket = new Bucket(bucketName);
        GetObjectRequest gor = new GetObjectRequest(bucket.getName(), fileName);
        S3Object object = conn.getObject(gor);
        if (object != null) {
            System.out.println("Content-Type: " + object.getObjectMetadata().getContentType());
            InputStream input = null;
            // FileOutputStream fileOutputStream = null;
            OutputStream out = null;
            byte[] data = null;
            try {
                //获取文件流
                //信息头,相当于新建的名字
                response.setHeader("content-disposition", "attachment;filename=" + URLEncoder.encode(oldFileName, "UTF-8"));
                input = object.getObjectContent();
                data = new byte[input.available()];
                int len = 0;
                out = response.getOutputStream();
                //fileOutputStream = new FileOutputStream(targetFilePath);
                while ((len = input.read(data)) != -1) {
                    out.write(data, 0, len);
                }
            } catch (IOException e) {
                log.error("AmazonS3FileUtils失败", e.getMessage());
            } finally {
                //关闭输入输出流
                if (out != null) {
                    try {
                        out.close();
                    } catch (IOException e) {
                        log.error("AmazonS3FileUtils失败", e.getMessage());
                    }
                }
                if (input != null) {
                    try {
                        input.close();
                    } catch (IOException e) {
                        log.error("AmazonS3FileUtils失败", e.getMessage());
                    }
                }
            }
        }
    }


   

    /**
     * 从网络Url中下载文件
     *
     * @param urlStr
     * @throws IOException
     */
    public static byte[] downLoadFromUrl(String urlStr) throws IOException {
        URL url = new URL(urlStr);
        HttpURLConnection conn = (HttpURLConnection) url.openConnection();
        //设置超时间为3秒
        conn.setConnectTimeout(30 * 1000);
        conn.setDoInput(true);
        conn.setDoOutput(true);
        //防止屏蔽程序抓取而返回403错误
        conn.setRequestProperty("User-Agent", "Mozilla/4.0 (compatible; MSIE 5.0; Windows NT; DigExt)");
        //连接
        conn.connect();
        //得到输入流
        InputStream inputStream = conn.getInputStream();
        byte[] getData = null;
        try {
            ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
            byte[] d = new byte[1024];
            int len = 0;
            while ((len = inputStream.read(d)) != -1) {
                outputStream.write(d, 0, len);
            }
            outputStream.flush();
            //获取自己数组
            getData = outputStream.toByteArray();
        } catch (Exception e) {
            log.error("AmazonS3FileUtils失败", e.getMessage());
        } finally {
            if (inputStream != null) {
                inputStream.close();
            }
        }
        return getData;
    }


    /**
     * 从输入流中获取字节数组
     *
     * @param inputStream
     * @return
     * @throws IOException
     */
    public static byte[] readInputStream(InputStream inputStream) throws IOException {
        byte[] buffer = new byte[1024];
        int len = 0;
        ByteArrayOutputStream bos = new ByteArrayOutputStream();
        while ((len = inputStream.read(buffer)) != -1) {
            bos.write(buffer, 0, len);
        }
        bos.close();
        return bos.toByteArray();
    }

}

这是具体的工具类型,可以直接使用
其实本来和前端商议的也是直接用他们之前的转成base64的格式,但是出了点问题,我发现图片的大小好大啊,转成base64我这边没有办法测试看他转成图片后的样子,所以我只能换成附件下载的样子,直接给前端下载一个图片,

@Override
    public void getLeaderListUrl(HttpServletResponse res,String leaderNo) {
        List<String> leaderListUrlList = cadreLedgerMapper.getLeaderListUrl(leaderNo);
        String filename = "";
        if(null != leaderListUrlList&&leaderListUrlList.size()>0){
            filename = leaderListUrlList.get(0);
            InputStream inputStream = null;
            //这是蛮重要的部分,就是这里穿进去AmazonS3需要的参数,然后这样在调用AmazonS3FileUtils方法的时候才可以直接使用,
            AmazonS3FileUtils amazonS3FileUtils = new AmazonS3FileUtils(bucketName, endPoint, region, accessKey, secretKey);
            byte[] fileData= AmazonS3FileUtils.downloadInputStream(filename);
            try {
                OutputStream out = res.getOutputStream();
                res.setCharacterEncoding("utf8");
                res.setHeader("Content-disposition", "attachment; filename="+filename);
                // 更正Content-Type为jpg对应的MIME类型
                String[] split = filename.split("\\.");
                if(split.length>1){
                    if("png".equals(split[1])){
                        res.setContentType("image/png");
                    }else if("bmp".equals(split[1])){
                        res.setContentType("image/bmp");
                    }else if("gif".equals(split[1])){
                        res.setContentType("image/gif");
                    }else {
                        res.setContentType("image/jpeg");
                    }
                }else {
                    res.setContentType("image/jpeg");
                }
                out.write(fileData);
                out.flush();
                out.close();
            } catch (IOException ioe) {
                log.error(ioe.getMessage(), ioe);
            } finally {
                try {
                    if (inputStream != null) {
                        inputStream.close();
                    }
                } catch (IOException ioe) {
                    log.error(ioe.getMessage(), ioe);
                }
            }
        }
    }

nacos配置参数

实话说我本来是想直接写死的,我觉得大概率一个项目就我一个地方再用这个东西了,然后就不大对,我刚好可以实践一下之前学习的nacos配置参数

 	@Value("${amazons3.ceph.bucketName}")
    private String bucketName;

    @Value("${amazons3.ceph.endPoint}")
    private String endPoint;

    @Value("${amazons3.ceph.region}")
    private String region;

    @Value("${amazons3.ceph.accessKey}")
    private String accessKey;

    @Value("${amazons3.ceph.secretKey}")
    private String secretKey;

这是配置上对应的读取nacos的地址
在这里插入图片描述
然后在你的配置文件里面找到对应的nacos,然后登录一下,
在这里插入图片描述

在这里插入图片描述
配置上之后点击发布就可以了,后续如果地址或者账号密码之类的东西改变可以只改配置文件而不影响到代码

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/799719.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

谷歌DeepMind被曝抄袭开源成果,论文还中了顶流会议

卡奥斯智能交互引擎是卡奥斯基于海尔近40年工业生产经验积累和卡奥斯7年工业互联网平台建设的最佳实践&#xff0c;基于大语言模型和RAG技术&#xff0c;集合海量工业领域生态资源方优质产品和知识服务&#xff0c;旨在通过智能搜索、连续交互&#xff0c;实时生成个性化的内容…

vue3+ECharts实现可视化中国地图

目录 版本问题解决 中国地图实现 版本问题解决 目前echarts的最新版本为5.5.1 echarts在4.9.0版本以后移除了中国地图&#xff0c;所以如果的你的版本高于4.9.0就需要手动导入中国地图。版本低于或者等于4.9.0则不需要导入。 这里我分享一种导入方法&#xff1a; 1.将项目的…

SQL中的谓词与谓词下推

在 SQL 查询中&#xff0c;谓词&#xff08;Predicate&#xff09;是用来对数据进行过滤的条件。它们决定了数据从数据库表中被选择的条件。理解和正确使用 SQL 谓词对于编写高效查询至关重要。 目录 什么是谓词&#xff1f;一个真实的故事SQL 谓词的代码示例比较谓词逻辑谓词…

Gitee简易使用流程(后期优化)

目录 1.修改用户名 2.文件管理 新建文件/文件夹流程如下&#xff1a; 上传文件流程如下&#xff1a; 以主页界面为起点 1.修改用户名 点解右上角的头像--> 点击“账号设置” 点击左边栏里的“个人资料“ 直接修改用户名即可 2.文件管理 选择一个有修改权限仓库&#…

【RAGFlow】Ubuntu系统下实现源码启动RAGFlow

一、RAGFlow 是什么&#xff1f; RAGFlow 是一款基于深度文档理解构建的开源 RAG&#xff08;Retrieval-Augmented Generation&#xff09;引擎。RAGFlow 可以为各种规模的企业及个人提供一套精简的 RAG 工作流程&#xff0c;结合大语言模型&#xff08;LLM&#xff09;针对用…

隧道调频广播信号覆盖系统改造-泄漏电缆隧道全线无盲区调频覆盖解决方法探究

隧道调频广播信号覆盖系统改造-泄漏电缆隧道全线无盲区调频覆盖解决方法探究 由北京海特伟业科技有限公司任洪卓发布于2024年7月15日 随着城市交通的不断发展&#xff0c;隧道作为城市交通的重要组成部分&#xff0c;承担着日益增长的交通压力。为了确保行驶在隧道中的车辆能够…

AV1 编码标准中帧内预测技术概述

AV1 编码标准帧内预测 AV1&#xff08;AOMedia Video 1&#xff09;是一种开源的视频编码格式&#xff0c;旨在提供比现有标准更高的压缩效率和更好的视频质量。在帧内预测方面&#xff0c;AV1相较于其前身VP9和其他编解码标准&#xff0c;如H.264/AVC和H.265/HEVC&#xff0c;…

【分布式系统】CephFS文件系统之MDS接口详解

目录 一.服务端操作 1.在管理节点创建 mds 服务 2.查看各个节点的 mds 服务&#xff08;可选&#xff09; 3.创建存储池&#xff0c;启用 ceph 文件系统 4.查看mds状态&#xff0c;一个up&#xff0c;其余两个待命&#xff0c;目前的工作的是node01上的mds服务 5.创建用户…

做印尼TikTok直播会遇到什么困难?

TikTok直播已成为当下社交娱乐的重要组成部分&#xff0c;越来越多的直播达人在这个平台上崭露头角。特别是海外直播&#xff0c;受到了广大网友的热烈追捧。那么&#xff0c;在进行印尼TikTok直播会遇到哪些困难&#xff1f;这些困难是否可以通过TikTok直播专线来解决呢&#…

DBA 数据库管理 表管理 数据批量处理。表头约束

表管理 建库 库名命名规则&#xff1a;仅可以使用数字、字母、下划线、不能纯数字 不可使用MySQL命令或特殊字符 库名区分字母大小写 加if not exists 命令避免重名报错 create database if not exists gamedb; 建表 drop database if exists gamedb ; 删表…

高频面试题基本总结回顾4(含笔试高频算法整理)

目录 一、基本面试流程回顾 二、基本高频算法题展示 三、基本面试题总结回顾 &#xff08;一&#xff09;Java高频面试题整理 &#xff08;二&#xff09;JVM相关面试问题整理 &#xff08;三&#xff09;MySQL相关面试问题整理 &#xff08;四&#xff09;Redis相关面试…

【通信协议-RTCM】MSM语句(1) - 多信号GNSS观测数据消息格式

注释&#xff1a; RTCM响应消息1020为GLONASS星历信息&#xff0c;暂不介绍&#xff0c;前公司暂未研发RTCM消息类型版本的DR/RTK模块&#xff0c;DR/RTK模块仅NMEA消息类型使用 注释&#xff1a; 公司使用的多信号语句类型为MSM4&MSM7&#xff0c;也应该是运用最广泛的语句…

JMeter CSV 参数文件的使用教程

在 JMeter 测试过程中&#xff0c;合理地使用参数化技术是提高测试逼真度的关键步骤。本文将介绍如何通过 CSV 文件实现 JMeter 中的参数化。 设定 CSV 文件 首先&#xff0c;构建一个包含需要参数化数据的 CSV 文件。打开任何文本编辑器&#xff0c;输入希望模拟的用户数据&…

internet download manager(IDM下载器) 6.42.8.2下载安装使用指南

internet download manager(IDM下载器) 6.42.8.2Z是一款功能强大的下载加速工具&#xff0c;能够显著提升您的下载速度&#xff0c;最高可达500%。它不仅能够加速下载&#xff0c;还能对下载任务进行智能调度&#xff0c;并具备恢复中断下载的能力。根据用户评价&#xff0c;无…

Dify中的工具

Dify中的工具分为内置工具&#xff08;硬编码&#xff09;和第三方工具&#xff08;OpenAPI Swagger/ChatGPT Plugin&#xff09;。工具可被Workflow&#xff08;工作流&#xff09;和Agent使用&#xff0c;当然Workflow也可被发布为工具&#xff0c;这样Workflow&#xff08;工…

git批量删除本地包含某字符串的特定分支

git批量删除本地包含某字符串的特定分支 git branch -a | grep 分支中包含的字符串 | xargs git branch -D git删除本地分支_git查看删除本地分支-CSDN博客文章浏览阅读989次。git branch -d <分支名>可以通过: git branch 查看所有本地分支及其名字&#xff0c;然后删…

PHP中的函数与调用:深入解析与应用

目录 一、函数基础 1.1 函数的概念 1.2 函数的定义 1.3 函数的调用 二、PHP函数的分类 2.1 内置函数 2.2 用户自定义函数 2.3 匿名函数 2.4 递归函数 2.5 回调函数 2.6 魔术方法 三、函数的参数与返回值 3.1 参数传递 3.2 返回值 四、函数的高级特性 4.1 可变函…

搭建调用链监控Zipkin和Sleuth

项目环境: win7、jdk8 1、添加依赖&#xff0c;添加了spring-cloud-starter-zipkin会自动导入Sleuth <!--Sleuth&#xff0c;zipkin--><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-zipkin</…

路径规划 | 基于蚁群算法的三维无人机航迹规划(Matlab)

目录 效果一览基本介绍程序设计参考文献 效果一览 基本介绍 基于蚁群算法的三维无人机航迹规划&#xff08;Matlab&#xff09;。 蚁群算法&#xff08;Ant Colony Optimization&#xff0c;ACO&#xff09;是一种模拟蚂蚁觅食行为的启发式算法。该算法通过模拟蚂蚁在寻找食物时…