苍穹外卖---文件上传-阿里OSS

一:开通阿里云对象存储服务oss,创建bucket,获得密钥

二:在程序中集成上传文件功能

1.连接阿里云OSS对象存储服务器

声明一个配置属性的文件用于传入连接的参数

package com.sky.properties;import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;@Component
@ConfigurationProperties(prefix = "sky.alioss")
@Data
public class AliOssProperties {private String endpoint;private String accessKeyId;private String accessKeySecret;private String bucketName;}

为了充分解耦,声明一个配置属性的类,从外部注入连接的属性值

  • @Component: 标注Spring管理的Bean,使用@Component注解在一个类上,表示将此类标记为Spring容器中的一个Bean
  • @data:Lombok注解用于生成对应的getter和setter方法
  • @ConfigurationProperties(prefix = "sky.alioss"):负责属性的批量注入

application.yml主配置文件中的配置信息:

spring:profiles:
用开发环境的配置文件active: devsky:alioss:endpoint: ${sky.alioss.endpoint}bucket-name: ${sky.alioss.bucket-name}access-key-id: ${sky.alioss.access-key-id}access-key-secret: ${sky.alioss.access-key-secret}

真正是信息配置在:开发环境中:application-dev.yml中 

通过配置多份不同环境的配置文件,再通过打包命令指定需要打包的内容之后进行区分打包

sky:alioss:endpoint: oss-cn-beijing.aliyuncs.combucket-name:  waimaiguoaccess-key-id: ***************access-key-secret: *************

填写阿里云相关信息,用于连接阿里云

三:封装一个aliyunOssUtil工具类,用于上传文件并拼接返回上传的文件的路径

package com.sky.utils;import com.aliyun.oss.ClientException;
import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder;
import com.aliyun.oss.OSSException;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.extern.slf4j.Slf4j;
import java.io.ByteArrayInputStream;@Data
@AllArgsConstructor
@Slf4j
public class AliOssUtil {private String endpoint;private String accessKeyId;private String accessKeySecret;private String bucketName;/*** 文件上传** @param bytes* @param objectName* @return*/public String upload(byte[] bytes, String objectName) {// 创建OSSClient实例。OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);try {// 创建PutObject请求就是把图片上传到阿里云OSS上。ossClient.putObject(bucketName, objectName, new ByteArrayInputStream(bytes));} 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();}}//文件访问路径规则 https://BucketName.Endpoint/ObjectNameStringBuilder stringBuilder = new StringBuilder("https://");stringBuilder.append(bucketName).append(".").append(endpoint).append("/").append(objectName);log.info("文件上传到:{}", stringBuilder.toString());return stringBuilder.toString();}
}

四:创建一个配置类用于生成工具类的bean交给spring容器管理

package com.sky.config;import com.sky.properties.AliOssProperties;
import com.sky.utils.AliOssUtil;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;@Configuration
@Slf4j
public class OssConfiguration {@Bean
//需要把属性通过参数注入其中public AliOssUtil aliOssUtil(AliOssProperties aliOssProperties){log.info("创建阿里云上传文件对象:{}",aliOssProperties);return new AliOssUtil(aliOssProperties.getEndpoint(),aliOssProperties.getAccessKeyId(),aliOssProperties.getAccessKeySecret(),aliOssProperties.getBucketName());}
}

五:创建一个controller接受前端的请求


import com.sky.constant.MessageConstant;
import com.sky.result.Result;
import com.sky.utils.AliOssUtil;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;import java.io.IOException;
import java.util.UUID;@RestController
@RequestMapping("/admin/common")
@Api (tags = "通用接口")
@Slf4j
public class commonController {@Autowiredprivate AliOssUtil aliOssUtil;@PostMapping("/upload")@ApiOperation("文件上传")public Result<String> upload(MultipartFile file){try {//接下来就是拼接文件名String originalFilename = file.getOriginalFilename();String substring = originalFilename.substring(originalFilename.lastIndexOf("."));String objectString= UUID.randomUUID()+substring;//第一参数为:文件的输入流;第二个参数为上传文件的名称;String upload = aliOssUtil.upload(file.getBytes(), objectString);return Result.success(upload);} catch (IOException e) {System.out.println("文件上传异常:"+e);}return Result.error(MessageConstant.UPLOAD_FAILED);}}
  • MultipartFile file:用于接收前端文件类型的参数
  • UUID类负责生成一个新的文件名称;防止文件名称重复
  • return Result.success(upload)
    最终返回给前端一个url,前端会请求这个路径回显图片

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

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

相关文章

OceanBase数据库oceanbase-ce的docker镜像中文说明

本文为OceanBase数据库oceanbase-ce的docker镜像的中文说明&#xff0c;原英文链接为&#xff1a; oceanbase/oceanbase-ce - Docker Image | Docker Hub 如何使用 docker 部署 OceanBase OceanBase 为 OceanBase 数据库提供了一个名为 oceanbase-ce 的独立测试镜像。默认情…

浏览器工作原理与实践--虚拟DOM:虚拟DOM和实际的DOM有何不同

虚拟DOM是最近非常火的技术&#xff0c;两大著名前端框架React和Vue都使用了虚拟DOM&#xff0c;所以我觉得非常有必要结合浏览器的工作机制对虚拟DOM进行一次分析。当然了&#xff0c;React和Vue框架本身所蕴含的知识点非常多&#xff0c;而且也不是我们专栏的重点&#xff0c…

yarn常用命令行

##修改hdfs日志的读写权限 hdfs dfs -ls /tmp/logs/autoflow/logs hdfs dfs -chmod arwx /tmp/logs/autoflow/logs ##查看所有node节点状态 yarn node -list -all ##查看当前运行的应用 yarn application -list ##杀掉application yarn application -kill application_17036…

二手车商的套路

https://www.dongchedi.com/article/7126394624675578405 https://www.dongchedi.com/article/7126394624675578405 现在&#xff0c;有越来越多的人去了解二手车&#xff0c;二手车相对于新车来说&#xff0c;更加的亲民划算。很多新车需要四五十万&#xff0c;而二手车有可…

Qt Creator 新建项目

&#x1f40c;博主主页&#xff1a;&#x1f40c;​倔强的大蜗牛&#x1f40c;​ &#x1f4da;专栏分类&#xff1a;QT❤️感谢大家点赞&#x1f44d;收藏⭐评论✍️ 目录 一、使用 Qt Creator 新建项目 1、新建项目 2、选择项目模板 3、选择项目路径 4、选择构建系统 5…

你不可不知的5款小众神器

Hey小伙伴们&#x1f44b;&#xff0c;是不是还在为工作中的效率不高而烦恼呢&#xff1f;别急&#xff0c;今天我就给大家安利5款超实用的国产小众工作效软件&#xff0c;让你的工作台效率翻倍&#xff0c;轻松应对各种工作挑战&#xff01;&#x1f31f; 1️⃣ 亿可达 ycoda…

使用立体视觉作为 3D LiDAR 的替代方案,在 KITTI ADAS 立体视觉数据集上微调立体变换器 (STTR) 模型-含数据集+源码资料下载

为什么是立体视觉? ADAS 立体视觉是指使用两个摄像头(类似于人眼)从略有不同的角度捕获图像的技术。该设置模仿人类双眼视觉,使系统能够感知环境的深度和 3D 结构。 立体视觉的关键技术方面 ADAS 立体视觉具有多种优势和高度复杂的功能。让我们探索它们以更好地理解: …

视频图像的两种表示方式YUV与RGB(4)

本篇主要讲YUV与RGB之间的转换&#xff0c;包括YUV444 颜色编码格式 转为 RGB 格式 &#xff0c;RGB颜色编码格式转为 YUV444 格式。 一、 YUV与RGB之间的转换 YUV与RGB颜色格式之间进行转换时 , 涉及一系列的数学运算 ; YUV 颜色编码格式转为RGB格式的转换公式 取决于 于 YUV …

蓝桥杯每日一题:矩形牛棚(单调栈)

作为一个资本家&#xff0c;农夫约翰希望通过购买更多的奶牛来扩大他的牛奶业务。 因此&#xff0c;他需要找地方建立一个新的牛棚。 约翰购买了一大块土地&#xff0c;这个土地可以看作是一个 R行&#xff08;编号 1∼R1&#xff09;C 列&#xff08;编号 1∼C1&#xff09;…

Python requests 模块

爬虫、网络编程、接口......对于Python工程师来讲都绕不过一个强大的模块---requests&#xff0c;本篇文章就深入详细讲一讲requests模块。同时也先也分享一下开源API网站&#xff1a;Gitee-API文档、JSONPlaceholder API文档、和风天气API文档、Postman Echo API网站&#xff…

C语言_文件操作

文件基础 什么是文件 文件是在计算机中以实现某种功能、或某个软件的部分功能为目的而定义的一个单位。磁盘上的文件是文件。但是在程序设计中&#xff0c;我们一般谈的文件有两种&#xff1a;程序文件、数据文件&#xff08;从文件功能的角度来分的&#xff09;。 程序文件 …

App加固:不同类型和费用对比

文章目录 [TOC]引言应用程序加固是什么不同类型[App加固](https://www.ipaguard.com/)的费用对比基础加固高级加固云加固 白嫖的混淆加密工具](https://www.ipaguard.com/)-[ipaguard总结参考资料 引言 在当前移动应用市场中&#xff0c;安全性已经成为一个非常重要的话题。为…

Qt单实例运行

开发过程中经常需要确保Qt程序的唯一实例运行&#xff0c;方法有很多种&#xff0c;这里讲一种最方便的方法&#xff0c;创建共享内存。共享内存是操作系统提供的一种进程间通信机制&#xff0c;允许多个进程访问同一块内存区域。你可以利用这一特性来标记程序是否已经在运行。…

tdesign坑之EnhancedTable树形结构默认展开所有行

⚠️在官方实例中&#xff0c;树形结构的表格提供了2种方法控制展开全部节点&#xff1a; 一是通过配置属性tree.defaultExpandAll为true代表默认展开全部节点&#xff08;仅默认情况有效&#xff09;&#xff1b; 二是使用组件实例方法expandAll()可以自由控制树形结构的展开…

web页面刷新,怎么使每次的随机颜色都一样?

// 创建一个种子随机数生成器 function seededRandom(seed) { var x Math.sin(seed) * 10000; return x - Math.floor(x); } // 使用种子随机数生成器来生成颜色 function generateColor(id) { var random seededRandom(id); var r Math.floor(random * 256); var g Math.…

Bert基础(十二)--Bert变体之知识蒸馏原理解读

B站视频&#xff1a;https://www.bilibili.com/video/BV1nx4y1v7F5/ 白话知识蒸馏 在前面&#xff0c;我们了解了BERT的工作原理&#xff0c;并探讨了BERT的不同变体。我们学习了如何针对下游任务微调预训练的BERT模型&#xff0c;从而省去从头开始训练BERT的时间。但是&#…

311_C++_QT表格的单个item的撤销、恢复操作,代码量很小,轻量化

:初始截图 :修改截图 :撤销截图 connect(m_customTableWidget, &QTableWidget::itemChanged, this, &FileDoc::itemChanged);

o(∩_∩)o设置代理访问博客(三)o(∩_∩)o

增加定时执行功能 直接看代码实现&#xff1a; # -*- coding:UTF-8 -*-import json import random import re import threading import time from datetime import timedeltaimport requests from bs4 import BeautifulSoup from loguru import loggeruid "qq_17328759…

离心机租赁,冷冻离心机租借,实验室离心机租售,大容量离心机以租代买

离心机租赁,冷冻离心机租借,实验室离心机租售,大容量离心机以租代买&#xff0c;满足广大客户对离心的租赁与购买需求! 服务优势 1、以租代买&#xff1a;租期达到一定期限&#xff0c;租金抵扣货款&#xff1b; 2、快速上门&#xff1a;2分钟响应&#xff0c;同城12小时内到…

短剧在线搜索PHP网站源码

源码简介 短剧在线搜索PHP网站源码&#xff0c;自带本地数据库500数据&#xff0c;共有6000短剧视频&#xff0c;与短剧猫一样。 搭建环境 PHP 7.3 Mysql 5.6 安装教程 1.上传源码到网站目录中 2.修改【admin.php】中&#xff0c; $username ‘后台登录账号’; $passwor…