Java 封装阿里云 oss 上传图片时抽取配置到 application 使用 @Value 获取值

news2024/9/20 16:36:40

Java 封装阿里云 oss 上传图片时抽取配置到 application 使用 @Value 获取值

application .yml 配置

alioss:   # 阿里云配置
  endpoint: "https://oss-cn-beijing.aliyuncs.com"    # Endpoint以华东1(杭州)为例,其它Region请按实际情况填写。
  bucketName: ""  # 填写Bucket名称,例如examplebucket。
  access_key: ""  # 点击头像->Accesskey管理查看 秘钥
  access_key_secret: "" # 密码

上传代码

package com.zhong.utils;

import com.aliyun.oss.ClientException;
import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder;
import com.aliyun.oss.OSSException;
import com.aliyun.oss.model.PutObjectRequest;
import com.aliyun.oss.model.PutObjectResult;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;

import java.io.InputStream;
/**
 * @ClassName : AliOssUtil
 * @Description : 阿里云上传服务
 * @Author : zhx
 * @Date: 2024-03-1 20:29
 */
@Component
public class AliOssUtil {
	// 抽取配置
    private static String ENDPOINT;
    @Value("${alioss.endpoint}")
    public void setENDPOINT(String endpoint){
        ENDPOINT = endpoint;
    }
    private static String ACCESS_KEY;
    @Value("${alioss.access_key}")
    public void setAccessKey(String accessKey){
        ACCESS_KEY = accessKey;
    }
    private static String ACCESS_KEY_SECRET;
    @Value("${alioss.access_key_secret}")
    public void setAccessKeySecret(String accessKeySecret){
        ACCESS_KEY_SECRET = accessKeySecret;
    }
    private static String BUCKETNAME;
    @Value("${alioss.bucketName}")
    public void setBUCKETNAME(String bucketName){
        BUCKETNAME = bucketName;
    }
	
	// 上传业务
    public static String uploadFile(String objectName, InputStream inputStream) {
        String url = "";
        // 创建OSSClient实例。
        OSS ossClient = new OSSClientBuilder().build(ENDPOINT, ACCESS_KEY, ACCESS_KEY_SECRET);
        try {
            // 创建PutObjectRequest对象。
            PutObjectRequest putObjectRequest = new PutObjectRequest(BUCKETNAME, objectName, inputStream);
            // 如果需要上传时设置存储类型和访问权限,请参考以下示例代码。
            // ObjectMetadata metadata = new ObjectMetadata();
            // metadata.setHeader(OSSHeaders.OSS_STORAGE_CLASS, StorageClass.Standard.toString());
            // metadata.setObjectAcl(CannedAccessControlList.Private);
            // putObjectRequest.setMetadata(metadata);

            // 上传文件。
            PutObjectResult result = ossClient.putObject(putObjectRequest);
            url = "https://" + BUCKETNAME + "." + ENDPOINT.substring(ENDPOINT.lastIndexOf("/") + 1) + "/" + objectName;
        } catch (OSSException oe) {
            System.out.println("Caught an OSSException, which means your request made it to OSS, "
                    + "but was rejected with an error response for some reason.");
            System.out.println("Error Message:" + oe.getErrorMessage());
            System.out.println("Error Code:" + oe.getErrorCode());
            System.out.println("Request ID:" + oe.getRequestId());
            System.out.println("Host ID:" + oe.getHostId());
        } catch (ClientException ce) {
            System.out.println("Caught an ClientException, which means the client encountered "
                    + "a serious internal problem while trying to communicate with OSS, "
                    + "such as not being able to access the network.");
            System.out.println("Error Message:" + ce.getMessage());
        } finally {
            if (ossClient != null) {
                ossClient.shutdown();
            }
        }
        return url;
    }
}

程序调用

package com.zhong.controller;

import com.zhong.pojo.Result;
import com.zhong.utils.AliOssUtil;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;

import java.util.UUID;

/**
 * @ClassName : FileUploadController
 * @Description : 文件上传相关操作
 * @Author : zhx
 * @Date: 2024-03-01 19:45
 */
@RestController

public class FileUploadController {
    @PostMapping("/upload")
    public Result<String> uploadImage(MultipartFile file) throws Exception {
        // 获取文件原名
        String originalFilename = file.getOriginalFilename();
        // 防止重复上传文件名重复
        String fileName = UUID.randomUUID() + originalFilename.substring(originalFilename.indexOf("."));
        // 把文件储存到本地磁盘
//        file.transferTo(new File("E:\\SpringBootBase\\ProjectOne\\big-event\\src\\main\\resources\\flies\\" + fileName));
        String url = AliOssUtil.uploadFile(fileName, file.getInputStream());
        return Result.success(url);
    }
}

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ES系列之Logstash实战入门

概述 作为ELK技术栈一员&#xff0c;Logstash用于将数据采集到ES&#xff0c;通过简单配置就能把各种外部数据采集到索引中进行保存&#xff0c;可提高数据采集的效率。 原理 数据源提供的数据进入Logstash的管道后需要经过3个阶段&#xff1a; input&#xff1a;负责抽取数…

AI新工具(20240301) Ideogram; Image to Music Generator等

1: Ideogram 全新的多模态生图AI工具&#xff0c;以其优秀的文字渲染能力和生图能力受到业界瞩目 Ideogram是一个创新的AI工具&#xff0c;它通过在生成的图片中自然地整合文字&#xff0c;解决了生图AI领域长期存在的一个难题。这个工具特别擅长将文本以极其自然和协调的方式…

gRPC知识归档

文章目录 gRPC知识归档gRPC原理什么是gRPCgRPC的特性gRPC支持语言gRPC使用场景gRPC设计的动机和原则 数据封装和数据传输问题网络传输中的内容封装和数据体积问题JSONProtobuf&#xff08;微服务之间的服务器调用&#xff0c;一般采用二进制序列化&#xff0c;比如protobuf&…

ChatGPT与GEE+ENVI+python高光谱,多光谱等成像遥感数据处理技术

原文链接&#xff1a;ChatGPT与GEEENVIpython高光谱&#xff0c;多光谱等成像遥感技术 第一遥感科学与AI基础 一&#xff1a;遥感科学的基本原理和历史 从摄影侦察到卫星图像 遥感的基本原理 遥感的典型应用 最新进展和未来趋势 二&#xff1a;ChatGPT 什么是ChatGPT&a…

数字口岸再升级:广西二期项目助力口岸通关提速运营增效!

在数字口岸相关政策的引领下&#xff0c;广西与RCEP其他成员国进出口规模有力攀升&#xff0c;大力推动了广西向海经济&#xff0c;临港产业集群不断壮大&#xff0c;大宗商品贸易快速增长。据海关统计&#xff0c;2023年&#xff0c;广西进出口总值6936.5亿元人民币&#xff0…

k8s中容器的调度与创建:CRI,cgroup

container调度与创建 选自&#xff1a;K8s、CRI与container - packy的文章 - 知乎 https://zhuanlan.zhihu.com/p/102897620 Cgroup创建&#xff1a; cgexec -g cpu,memory:$UUID \ > unshare -uinpUrf --mount-proc \ > sh -c "/bin/hostname $UUID &…

关于vue中关于eslint报错的问题

1 代码保存的时候会自动将单引号报错为双引号 导致eslint报错的问题&#xff0c; 解决思路&#xff1a; 在项目根目录下新建一个.prettierrc.json文件 { “tabWidth”: 2,“useTabs”: false,“singleQuote”: true,“semi”: false} 2 关于报错代码的时候 出现尾随逗号报错…

MySQL 多表查询 连接查询 外连接

介绍 MySQL 多表查询 连接查询 内连接 外连接分为两种&#xff0c;左外和右外连接&#xff0c; 左外&#xff1a;相当于查询表1(左表)的所有数据 包含 表1和表2交集部分的数据,完全包含左表的数据 右外&#xff1a;相当于查询表2(右表)的所有数据 包含 表1和表2交集部分的数据…

《PySide6/PyQt6快速开发与实战》P111被省略了的案例

编程环境&#xff1a;Fedora, QtCreator 见代码&#xff1a; # This Python file uses the following encoding: utf-8 import sys from PySide6.QtWidgets import QApplication, QMainWindow, QLabel, QVBoxLayout, QWidget from PySide6.QtGui import QPalette #, QColo…

Scratch 第十三课-飞机大战游戏

第十三课-飞机大战游戏 学习目标 这节课我们做一款大家都爱玩的飞机大战游戏&#xff0c;学习重点&#xff1a; 如何导入外部角色如何让飞机发射子弹鼠标控制角色移动 程序设计 程序分析 &#xff1a; 飞机大战游戏相信很多小朋友都玩过&#xff0c;我方飞机在下方&#xf…

双通道音频功率放大电路,外接元件少, 通道分离性好,3V 的低压下可正常使用——D2025

D2025 为立体声音频功率放大集成电路&#xff0c;适用于各类袖珍或便携式立体声 收录机中作功率放放大器。 D2025 采用 DIP16 封装形式。 主要特点&#xff1a;  适用于立体声或 BTL 工作模式  外接元件少  通道分离性好  电源电压范围宽&#xff08;3V~12V &#xff…

Unity3d Shader篇(十)— 渐变纹理

文章目录 前言一、什么是Unlity渐变纹理Shader&#xff1f;1. 渐变纹理Shader工作原理2. 渐变纹理&#xff1f;3. 渐变纹理的优缺点优点&#xff1a;缺点&#xff1a; 4. 渐变纹理例图 二、使用步骤1. Shader 属性定义2. SubShader 设置3. 渲染 Pass4. 定义结构体和顶点着色器函…

【Flutter 面试题】解释 Flutter的热重载(Hot Reload)功能

【Flutter 面试题】解释 Flutter的热重载&#xff08;Hot Reload&#xff09;功能 文章目录 写在前面解答补充说明 写在前面 关于我 &#xff0c;小雨青年 &#x1f449; CSDN博客专家&#xff0c;GitChat专栏作者&#xff0c;阿里云社区专家博主&#xff0c;51CTO专家博主。2…

JVM运行时数据区——本地方法接口和本地方法栈

1、本地方法接口 虽然Java语言使用非常广泛&#xff0c;但是有些事务Java仍然无法处理。例如线程相关的功能&#xff0c;在线程类当中就有很多本地方法接口。那么Java如何来处理这些问题呢&#xff1f;Java设计师提出了一种解决方案就是本地方法接口。本贴将会讲解本地方法接口…

spark sql 转换字符串数组成多列结构

背景 在平时使用spark sql分析数据时&#xff0c;特别是分析从mysql的表入仓的hive表时&#xff0c;我们会经常和字符串数组的列打交道&#xff0c;而且这种情况下我们一般都需要把一行字符串数组的行数据转成多列的形式&#xff0c;我们看下怎么写这个sql spark sql 转换字符…

idea中maven配置(一次成功,全部细节都有)

写这篇文章的原因是maven的配置很简单&#xff0c;但是也很容易出错&#xff0c;我连配了两台电脑的maven出现了各种小错误&#xff0c;参考了以下两篇博文IDEA配置Maven教程&#xff08;超详细版~)_idea maven配置教程-CSDN博客 一次包会——最新IDEA配置Maven指南&#xff0…

(学习日记)2024.03.01:UCOSIII第三节

写在前面&#xff1a; 由于时间的不足与学习的碎片化&#xff0c;写博客变得有些奢侈。 但是对于记录学习&#xff08;忘了以后能快速复习&#xff09;的渴望一天天变得强烈。 既然如此 不如以天为单位&#xff0c;以时间为顺序&#xff0c;仅仅将博客当做一个知识学习的目录&a…

ABAP - OOALV 单元格 F4实现

方式一:使用标准数据表&#xff0c;FIELDCAT字段设置值 gs_fieldcat-ref_table X. "列可编辑gs_fieldcat-ref_table MARA. "F4 参考表gs_fieldcat-ref_field MATNR. "F4 参考字段 方式二.使用自定义数据 &#xff0c;实现效果如下图…

git根据文件改动将文件自动添加到缓冲区

你需要修改以下脚本中的 use_cca: false 部分 #!/bin/bash# 获取所有已修改但未暂存的文件 files$(git diff --name-only)for file in $files; do# 检查文件中是否存在"use_cca: false"if grep -q "use_cca: false" "$file"; thenecho "Ad…

【ue5】滑铲系统蓝图笔记

大致逻辑如下&#xff1a; 一、导入动画 滑铲蹲待机蹲行走 导入到文件夹中 可以右键设置颜色&#xff0c;便于区分。 二、调整动画 1.启动根运动 启动根运动后&#xff0c;人物才可以位移&#xff0c;不然只能在原地。 打开动画序列&#xff0c;勾选启用根运动Enabled…