当前位置: 首页 > news >正文

【SpringBoot】-- 实现本地文件/图片上传到服务器生成url地址

        在java项目中你可能会有以下需求:用户上传本地图片,然后展示在网页上。本篇文章将使用阿里云oss实现上传图片到oss,oss生成url。

一、准备工作

首先进入阿里云,按如下操作

进入创建页面,修改读写权限为公共读

然后进入bucket,创建AccessKey

创建后,保存好AccessKeyID和AccessKey Secret

二、代码

将以下依赖添加到项目的pom.xml文件中

<dependency><groupId>com.aliyun.oss</groupId><artifactId>aliyun-sdk-oss</artifactId><version>3.15.1</version>
</dependency><dependency><groupId>javax.xml.bind</groupId><artifactId>jaxb-api</artifactId><version>2.3.1</version>
</dependency>
<dependency><groupId>javax.activation</groupId><artifactId>activation</artifactId><version>1.1.1</version>
</dependency>
<!-- no more than 2.3.3-->
<dependency><groupId>org.glassfish.jaxb</groupId><artifactId>jaxb-runtime</artifactId><version>2.3.3</version>
</dependency>

创建一个工具类,用于配置aliyunoss

添加以下代码:(注意修改)

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 java.io.FileInputStream;
import java.io.InputStream;public class AliOssUtil {// Endpoint以华东1(杭州)为例,其它Region请按实际情况填写。private static final String ENPOINT = "地区";// 从环境变量中获取访问凭证。运行本代码示例之前,请确保已设置环境变量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。
//        EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();private static final String ACCESS_KEY_ID="你的ID";private static final String ACCESS_KEY_SECRT="KEY";// 填写Bucket名称,例如examplebucket。private static final String BUCKETNAME = "你的bucket名称";public static String uploadFile(String objectName, InputStream in) throws Exception {// 创建OSSClient实例。OSS ossClient = new OSSClientBuilder().build(ENPOINT,ACCESS_KEY_ID,ACCESS_KEY_SECRT);String url = "";try {// 填写字符串。String content = "Hello OSS,你好世界";// 创建PutObjectRequest对象。PutObjectRequest putObjectRequest = new PutObjectRequest(BUCKETNAME, objectName,in);// 如果需要上传时设置存储类型和访问权限,请参考以下示例代码。// 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组成:http://bucket名称.区域节点url = "https://" + BUCKETNAME + "." + ENPOINT.substring(ENPOINT.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;}
}

然后在控制类中使用

@RestController
public class FileUploadController {@PostMapping("/upload")public Result<String> upload(MultipartFile file) throws Exception {String originalFilename = file.getOriginalFilename();//保证文件名字唯一,防止文件覆盖String filename = UUID.randomUUID().toString()+originalFilename.substring(originalFilename.lastIndexOf("."));String url = AliOssUtil.uploadFile(filename,file.getInputStream());return Result.success(url);}}

三、测试接口

这里使用apifox进行测试

发送请求后,可以看到图片已经存储到oss上,并且返回了地址。

相关文章:

【SpringBoot】-- 实现本地文件/图片上传到服务器生成url地址

在java项目中你可能会有以下需求&#xff1a;用户上传本地图片&#xff0c;然后展示在网页上。本篇文章将使用阿里云oss实现上传图片到oss&#xff0c;oss生成url。 一、准备工作 首先进入阿里云&#xff0c;按如下操作 进入创建页面&#xff0c;修改读写权限为公共读 然后进…...

计算机基础专升本笔记十四-计算机网络基础(一)

计算机基础专升本笔记十四-计算机网络基础&#xff08;一&#xff09; 一、计算机网络的发展历程 第一代计算机网络&#xff08;数据通信&#xff09; 以数据通信为主的第一代计算机网络。主要是指美国军方用于防控系统的一种联机系统。它只是计算机网络的雏形。 第二代计算…...

【华为OD机试】转盘寿司【C卷|100分】

【华为OD机试】-真题 !!点这里!! 【华为OD机试】真题考点分类 !!点这里 !! 题目描述 寿司店周年庆,正在举办优惠活动回馈新老客户。 寿司转盘上总共有 n 盘寿司,prices[i] 是第 i 盘寿司的价格, 如果客户选择了第 i 盘寿司,寿司店免费赠送客户距离第 i 盘寿司最近的下一…...

使用Node JS获取WI-FI密码

演示效果 全局安装wifi-password-cli依赖 shell 复制代码 npm install wifi-password-cli -g # or npx wifi-password-cli 使用 shell 复制代码 $ wifi-password [network-name] $ wifi-password 12345678 $ wifi-password 办公室wifi a1234b2345 觉得Node.js很神奇是…...

先缓存第二集抖音接入 ,最近加班猛,就分享简单的知识,如何使用:关于使用replace的用法正则表达式

1、需求&#xff1a;比如在cocos creator策划让你制作一个预制体&#xff0c;标题要读取配置&#xff0c;然后中间显示的内容要滚动的&#xff0c;要做成一个通用的&#xff0c;然后给到的配置表是这样子的: 配置表&#xff1a;假设字段是这样子的 content "内容标题&…...

企微hook源码

企微hook源码已经在QQ群内开源。速度进群下载&#xff0c;避免和谐。 QQ群&#xff1a;649480745...

vsphere虚拟机迁移是灰色如何解决

vsphere虚拟机迁移是灰色如何解决 问题描述&#xff1a; 在vsphere中&#xff0c;迁移虚拟机时迁移按钮是灰色&#xff0c;无法迁移&#xff0c;关机之后也无法迁移 虚拟机按钮为灰色 找到虚拟机存储对应的位置&#xff0c;查询是否有.vmx虚拟机文件 查询中发现有.vmx文件存…...

swift 闭包捕获列表

以下函数会打印出什么&#xff1f; var car "Benz" let closure { [car] in print("I drive \(car)") } car "Tesla" closure() 因为 clousre 已经申明将 car 复制进去了&#xff08;[car]&#xff09;&#xff0c;此时clousre 里的 car…...

JavaWeb04-Request,Response

目录 一、Request&#xff08;请求&#xff09; 1.作用 2.继承体系 3.获取请求数据 &#xff08;1&#xff09;请求行 &#xff08;2&#xff09;请求头 &#xff08;3&#xff09;请求体&#xff08;POST&#xff09; &#xff08;5&#xff09;Request通用方式获取请求…...

使用 Docker 部署 Fiora 在线聊天室平台

一、Fiora 介绍 Fiora 简介 Fiora 是一款开源免费的在线聊天系统。 GitHub&#xff1a;https://github.com/yinxin630/fiora Fiora 功能 注册账号并登录&#xff0c;可以长久保存你的数据加入现有群组或者创建自己的群组&#xff0c;来和大家交流和任意人私聊&#xff0c;并添…...

Unity Samples和帧动画的问题

拖动序列帧图片和自己创建clip的帧率不同 我今天在创建帧动画的时候用了两种方式第一种是直接拖动序列帧图片到Hierachy&#xff0c;然后生成的第二种是这样我发现两者播放的动画速率不一样最后查了半天查不到原因。最后发现是Samples的原因&#xff0c;而且Unity把Samples这个…...

几何工具的使用

Geometry - Creation 创建几何 CogCreateCircleTool&#xff1a;创建圆CogCreateEllipseTool:创建椭圆CogCreateLineBisectPointsTool&#xff1a;带有两个点的平行线CogCreateLineParallelTool:在某一点创建某条线的平行线CogCreateLinePerpendicularTool:在某一点创建某条线…...

sudo command not found

文章目录 一句话Intro其他操作 一句话 sudo 某命令 改成 sudo -i 某命令 试试。 -i 会把当前用户的环境变量带过去&#xff0c;这样在sudo的时候&#xff0c;有更高的权限&#xff0c;有本用户的环境变量(下的程序命令)。 -i, --login run login shell as the target user; a …...

1.【Labview白话系列】Labview数组精讲

题主经过写文章一段时间的发现&#xff0c;许多同学对该软件的理解和编程能力是不太一样的&#xff0c;有些知识相对一些同学较为简单&#xff0c;但是有些同学提问就比较困难。那么针对这个问题&#xff0c;题主打算出一期说白话系列的专栏&#xff0c;在该栏目中用最通俗的大…...

ANTLR4规则解析生成器(三):遍历语法分析树

文章目录 1 词法分析2 语法分析3 遍历语法分析树3.1 Listener3.2 Visitor 4 总结 1 词法分析 词法分析就是对给定的字符串进行分割&#xff0c;提取出其中的单词。 在antlr4中&#xff0c;词法规则的名称的首字母需要大写&#xff0c;右侧必须是终结符&#xff0c;通常将词法…...

OpenCV实现目标追踪

目录 准备工作 语言&#xff1a; 软件包&#xff1a; 效果演示 代码解读 &#xff08;1&#xff09;导入OpenCV库 &#xff08;2&#xff09;使用 cv2.VideoCapture 打开指定路径的视频文件 &#xff08;3&#xff09;使用 vid.read() 读取视频的第一帧&#xff0c;ret…...

【剑指offer--C/C++】JZ6 从尾到头打印链表

一、题目 二、本人思路及代码 直接在链表里进行翻转不太方便操作&#xff0c;但是数组就可以通过下标进行操作&#xff0c;于是&#xff0c; 思路1、 先遍历链表&#xff0c;以此存到vector中&#xff0c;然后再从后往前遍历这vector,存入到一个新的vector&#xff0c;就完成…...

算法-买卖股票的最佳时机

1、题目来源 121. 买卖股票的最佳时机 - 力扣&#xff08;LeetCode&#xff09; 2、题目描述 给定一个数组 prices &#xff0c;它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。 你只能选择 某一天 买入这只股票&#xff0c;并选择在 未来的某一个不同的日子 卖…...

【大数据】Flink SQL 语法篇(十):EXPLAIN、USE、LOAD、SET、SQL Hints

《Flink SQL 语法篇》系列&#xff0c;共包含以下 10 篇文章&#xff1a; Flink SQL 语法篇&#xff08;一&#xff09;&#xff1a;CREATEFlink SQL 语法篇&#xff08;二&#xff09;&#xff1a;WITH、SELECT & WHERE、SELECT DISTINCTFlink SQL 语法篇&#xff08;三&…...

Java中List接口常见的实现类

目录 ArrayList实现类 数据存储 构造器 成员方法&#xff1a;CRUD Vector实现类 数据存储 构造器方法 成员方法 LinkedList实现类 数据存储 构造器方法 成员方法CRUD List总结 ArrayList&#xff1a;数组实现&#xff0c;随机访问速度快&#xff0c;增删慢&#x…...

告别“替身攻击”:手把手教你用零阶优化(ZOO)直接黑盒攻击DNN模型

零阶优化实战&#xff1a;无需替代模型的黑盒对抗攻击指南 当面对一个部署在云端的深度学习API时&#xff0c;传统白盒攻击手段往往束手无策——既无法获取模型架构&#xff0c;也不能执行反向传播。本文将揭示如何运用零阶优化技术&#xff0c;仅通过输入输出查询就能构造高效…...

新手避坑指南:用DJI NAZA-LITE飞控组装F450无人机,从焊接电调到GPS校准的完整流程

新手避坑指南&#xff1a;用DJI NAZA-LITE飞控组装F450无人机&#xff0c;从焊接电调到GPS校准的完整流程 第一次组装无人机就像玩一场高风险的拼图游戏——每个零件的位置、每根接线的顺序都可能影响最终能否安全起飞。作为过来人&#xff0c;我清楚地记得焊接电调时锡珠飞溅的…...

如何通过离线语音输入提升Android设备的文字录入效率

如何通过离线语音输入提升Android设备的文字录入效率 【免费下载链接】Sayboard An open-source on-device voice IME (keyboard) for Android using the Vosk library. 项目地址: https://gitcode.com/gh_mirrors/sa/Sayboard 在智能手机普及的今天&#xff0c;文字输…...

小白也能懂:Qwen3-TTS-Tokenizer-12Hz的API调用与Python示例

小白也能懂&#xff1a;Qwen3-TTS-Tokenizer-12Hz的API调用与Python示例 1. 前言&#xff1a;音频编解码器能做什么&#xff1f; 想象一下&#xff0c;你录制了一段重要的会议录音&#xff0c;文件大小有50MB&#xff0c;想通过微信发给同事&#xff0c;却发现超过了文件大小…...

多模态扩展实验:OpenClaw+Qwen3-32B处理图片描述生成

多模态扩展实验&#xff1a;OpenClawQwen3-32B处理图片描述生成 1. 实验背景与动机 最近在探索如何将OpenClaw的自动化能力扩展到视觉领域。作为一个长期依赖文本交互的框架&#xff0c;OpenClaw能否结合多模态大模型处理图像任务&#xff1f;这引发了我的兴趣。恰好手头有台…...

汉语到底比其他语言强在哪?

汉语到底比其他语言强在哪&#xff1f;只要一提起这个话题&#xff0c;弹幕里肯定有朋友要说了&#xff1a;哎呀&#xff0c;英语才是世界语言&#xff0c;汉语不严谨&#xff0c;语言没有高下之分&#xff0c;禁止拉踩。这种论调咱们听了一百年了&#xff0c;甚至不少自己人都…...

重新定义你的窗口管理体验 - StreamWindow 4.0

StreamWindow 4.0版本带来了重大更新&#xff0c;也做了很多优化和完善。 距离发布APP已经过去小半年了&#xff0c;这款macOS上的3D窗口管理工具随着4.0版本通过审核&#xff0c;带来大量的功能更新和完善&#xff0c;尤其引入了一种新的动画特效&#xff1a;扑克牌洗牌特效。…...

Pixel Fashion Atelier保姆级教程:修复WebUI中文乱码与像素字体缺失问题

Pixel Fashion Atelier保姆级教程&#xff1a;修复WebUI中文乱码与像素字体缺失问题 1. 问题背景与现象 Pixel Fashion Atelier作为一款融合复古像素风格的AI图像生成工具&#xff0c;其独特的界面设计是其核心亮点之一。然而&#xff0c;部分用户在部署和使用过程中可能会遇…...

泛微E9流程表单转PDF/HTML实战:手把手教你集成档案系统(附完整代码)

泛微E9流程表单转PDF/HTML全流程开发指南&#xff1a;从原理到实战 在企业管理数字化转型的浪潮中&#xff0c;OA系统与档案系统的无缝对接已成为提升组织效能的刚需。作为国内主流的协同办公平台&#xff0c;泛微E9的流程表单承载着企业核心业务流程数据&#xff0c;如何将这些…...

【Mojo+Python混合部署失效真相】:92%开发者忽略的编译期符号冲突、运行时上下文隔离与调试断点丢失问题

第一章&#xff1a;MojoPython混合部署失效真相全景概览Mojo 作为新兴的高性能系统编程语言&#xff0c;设计初衷是与 Python 生态无缝互操作&#xff1b;然而在真实生产部署中&#xff0c;“Mojo Python 混合部署”常出现静默失败、ABI 不兼容、运行时崩溃或性能断崖式下降等…...