文章目录

  • 注册阿里OSS
    • 注册并登录阿里云账号
    • 开通对象存储OSS
    • 创建Bucket
    • 修改权限
    • 创建AccessKey
    • 全局存储到你的计算机(可以跳过)
    • 查看官方文档(可以跳过)
  • SSM使用
    • 引入依赖
    • 在spring-mvc.xml中加入配置
    • 创建上传工具类AliOssUtil
    • 响应工具类ResultJSON
    • 编写controller
  • 编写前端代码使用ElmentUI
    • 自动上传
      • 代码编写
      • 结果如下演示
    • 手动上传
      • 前端代码编写
      • 后端代码编写
      • 结果演示如下

注册阿里OSS

注册并登录阿里云账号

地址如下:https://www.aliyun.com
注册后使用支付宝登录

开通对象存储OSS

这个很便宜,我10块钱几个月才用1分钱。不用担心过期收费过高。

找到产品。
在这里插入图片描述

点击免费试用
在这里插入图片描述

这个页面往下滑动,找到下图的然后点击立即试用。

在这里插入图片描述
勾选协议,立即试用。
在这里插入图片描述
点击管理试用
在这里插入图片描述

创建Bucket

继续上面的操作

点击三个横杠
在这里插入图片描述

搜索对象存储oss
在这里插入图片描述
创建Bucket
在这里插入图片描述
写入项目名称,其他不用管。
在这里插入图片描述
点击我知道了,确认创建
在这里插入图片描述
点击进入Bucket
在这里插入图片描述
如下图
在这里插入图片描述

修改权限

点击权限控制
在这里插入图片描述
将上面的话复制到下面然后点击确定
在这里插入图片描述
点击设置
在这里插入图片描述
点击公共读
在这里插入图片描述
点击继续修改
在这里插入图片描述
保存
在这里插入图片描述
下面的权限变成公共读即可

在这里插入图片描述

创建AccessKey

右上角头像,点击AccessKey。
在这里插入图片描述
勾选并点击继续
在这里插入图片描述

点击创建AccessKey,
在这里插入图片描述
选一种方式验证
在这里插入图片描述

注意:一定一定要保存好,丢了只能重新创建无法找回。
在这里插入图片描述

全局存储到你的计算机(可以跳过)

如果你害怕丢失
以管理员身份打开CMD命令行,执行如下命令,配置系统的环境变量。

set OSS_ACCESS_KEY_ID=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
set OSS_ACCESS_KEY_SECRET=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

注意:将上述的ACCESS_KEY_ID 与 ACCESS_KEY_SECRET 的值一定一定一定一定一定一定要替换成自己的 。

执行如下命令,让更改生效。

setx OSS_ACCESS_KEY_ID "%OSS_ACCESS_KEY_ID%"
setx OSS_ACCESS_KEY_SECRET "%OSS_ACCESS_KEY_SECRET%"

执行如下命令,验证环境变量是否生效。

echo %OSS_ACCESS_KEY_ID%
echo %OSS_ACCESS_KEY_SECRET%

查看官方文档(可以跳过)

阿里云oss 对象存储服务的准备工作我们已经完成了,接下来我们就来完成第二步操作:参照官方所提供的sdk示例来编写入门程序。
首先我们需要来打开阿里云OSS的官方文档,在官方文档中找到 SDK 的示例代码:
在这里插入图片描述

在这里插入图片描述

SSM使用

引入依赖

<!--阿里云OSS依赖--><dependency><groupId>com.aliyun.oss</groupId><artifactId>aliyun-sdk-oss</artifactId><version>3.17.4</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><dependency><groupId>commons-fileupload</groupId><artifactId>commons-fileupload</artifactId><version>1.4</version></dependency><dependency><groupId>commons-io</groupId><artifactId>commons-io</artifactId><version>2.11.0</version></dependency>

在spring-mvc.xml中加入配置

<!-- 配置 MultipartResolver 用于文件上传 --><bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"><!-- 设置最大上传文件大小 --><property name="maxUploadSize" value="10485760"/> <!-- 10MB --><property name="maxInMemorySize" value="4096"/><property name="defaultEncoding" value="UTF-8"/></bean>

创建上传工具类AliOssUtil

package com.Teenage_education_network.utils;import com.aliyun.oss.ClientException;
import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder;
import com.aliyun.oss.OSSException;import java.io.InputStream;public class AliOssUtil {private static final String ENDPOINT = "https://oss-cn-beijing.aliyuncs.com";private static final String ACCESS_KEY_ID = "你的id";private static final String SECRET_ACCESS_KEY = "你的秘钥";private static final String BUCKET_NAME = "项目名";/** uploadFile方法* objectName:文件名称比如 "YEjdihp893bif1.jpg"* inputStream:文件流,用于读取文件比如,D:\Users\Administrator\Desktop\YEjdihp893bif1.jpg* *///上传文件,返回文件的公网访问地址public static String uploadFile(String objectName, InputStream inputStream){// 创建OSSClient实例。OSS ossClient = new OSSClientBuilder().build(ENDPOINT,ACCESS_KEY_ID,SECRET_ACCESS_KEY);//公文访问地址String url = "";try {// 创建存储空间。ossClient.createBucket(BUCKET_NAME);ossClient.putObject(BUCKET_NAME, objectName, inputStream);// 这里是返回阿里云的url地址url = "https://"+BUCKET_NAME+"."+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;}
}

响应工具类ResultJSON

package com.hsh.pojo.tdo;import java.io.Serializable;/*** @Author: wzy* @Date: 2024/11/13 11:03* @Description: 返回结果类*/
public class ResultJSON<T> implements Serializable {private Integer code;private String msg;private T data;public ResultJSON(Integer code, String msg, T data) {this.code = code;this.msg = msg;this.data = data;}/*** 操作成功或者失败* @param c 受影响行数* @return 当前传入的受影响行数>0则返回成功,否则返回失败*/public static  ResultJSON successORerror(int c){return c>0?new ResultJSON(200,"操作成功",c):new ResultJSON(400,"操作失败",c);}public static ResultJSON success(){return new ResultJSON(200,"操作成功",null);}public static ResultJSON success(String msg){return new ResultJSON(200,msg,null);}public static <T> ResultJSON success(T data){return new ResultJSON(200,"操作成功",data);}public static ResultJSON success(Integer code,String msg){return new ResultJSON(code,msg,null);}public static <T> ResultJSON success(String msg,T data){return new ResultJSON(200,msg,data);}public static <T> ResultJSON success(Integer code,String msg,T data){return new ResultJSON(code,msg,data);}public static ResultJSON error(){return new ResultJSON(500,"操作失败",null);}public static ResultJSON error(String msg){return new ResultJSON(500,msg,null);}public static ResultJSON error(Integer code,String msg){return new ResultJSON(code,msg,null);}public T getData() {return data;}public void setData(T data) {this.data = data;}public Integer getCode() {return code;}public void setCode(Integer code) {this.code = code;}public String getMsg() {return msg;}public void setMsg(String msg) {this.msg = msg;}
}

编写controller

package com.hsh.controller;import com.hsh.pojo.tdo.ResultJSON;
import com.hsh.utils.AliOssUtil;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;import java.io.IOException;
import java.util.UUID;/*** @author xrkhy* @date 2025/9/6 19:05* @description*/@RestController
@RequestMapping("/upload")
public class UploadController {// 本次请求通过elementPlus的el-upload组件上传图片,通过el-upload组件的属性发起请求// 前端上传路径action="/api/upload/imgUpload" 要和后端一致 这里的/api是前端的反向代理的标识// 前端的name="img" 是这里的形参名// 前端的请求头添加token  :headers="{'Authorization':tokenStore.token}"@PostMapping("/imgUpload")public ResultJSON<String> imgUpload(@RequestParam("img") MultipartFile img) throws IOException {System.out.println(img);if (img == null || img.isEmpty()) {// 处理文件为空的情况return ResultJSON.error("文件不能为空");}String originalFilename = img.getOriginalFilename();// 生成新的唯一的文件名String fileNmae = UUID.randomUUID().toString() + originalFilename.substring(originalFilename.lastIndexOf("."));String url = AliOssUtil.uploadFile(fileNmae, img.getInputStream());System.out.println(url);return ResultJSON.success("添加成功",url);}
}

编写前端代码使用ElmentUI

自动上传

代码编写

<template><el-form:model="productForm"label-width="120px"label-position="right"><!-- 用户基础信息 --><el-form-item label="商品名称" prop="productName"><el-input v-model="productForm.productName"></el-input></el-form-item><el-form-item label="封面图片"><!-- :auto-upload 设置是否自动上传 true自动上传 --><!-- action为你的请求路径:你要替换为你的上传API地址 --><!-- name: 上传的文件字段名 (也就是后端的参数 我这里是img)后端的接收参数如下就是我上面写的UploadControllerpublic ResultJSON<String> imgUpload(@RequestParam("img") MultipartFile img){}--><!-- :on-success="handleAvatarSuccess" 上传成功回调 --><!-- :before-upload="beforeAvatarUpload"上传前校验 --><!--  list-type="picture-card" 文件列表的类型 这里不需要因为已经有<i class="el-icon-plus" v-if="!productForm.imageUrl"></i>代替了--><!-- :show-file-list="false" 是否显示已上传文件列表 --><!-- 除了上面还可以设置响应头,配置如下:headers="{'Authorization':tokenStore.token}"--><el-upload:auto-upload="true"action="http://localhost:8080/upload/imgUpload"name="img":on-success="handleAvatarSuccess":before-upload="beforeAvatarUpload":show-file-list="false"><!-- v-if="!productForm.imageUrl" 是如果上传成功这个+图标(<i class="el-icon-plus"></i>)上传的提示就不显示了  --><istyle="font-size: 20px; border: 1px solid #ccc; padding: 20px"class="el-icon-plus"v-if="!productForm.imageUrl"></i><img style="width: 100px" v-else :src="productForm.imageUrl" /></el-upload></el-form-item><el-form-item label="商品价格" prop="productPrice"><el-input-numberv-model="productForm.productPrice":precision="2":step="0.01"></el-input-number></el-form-item><el-form-item label="商品库存" prop="productStock"><el-input-numberv-model="productForm.productStock"label="描述文字"></el-input-number></el-form-item><!-- 操作按钮 --><el-form-item><el-button type="primary" @click="submitForm">提交</el-button><el-button @click="resetForm">重置</el-button></el-form-item></el-form>
</template><script>
export default {data() {return {productForm: {productId: null,productName: "",imageUrl: "",productPrice: "",productStock: ""},}}methods: {// 上传成功后的回调handleAvatarSuccess(res, file) {this.productForm.imageUrl = res.data;},// 上传前的校验beforeAvatarUpload(file) {const isJPG = file.type === "image/jpeg" || file.type === "image/png";const isLt2M = file.size / 1024 / 1024 < 2;if (!isJPG) {this.$message.error("上传头像图片只能是 JPG 或 PNG 格式!");}if (!isLt2M) {this.$message.error("上传头像图片大小不能超过 2MB!");}return isJPG && isLt2M;},submitForm() {console.log("提交的数据:", this.formData);// 这里在发起请求},}
}
</script>

结果如下演示

在这里插入图片描述
上面数据确实是拿到了,此时在点击提交发送。
在这里插入图片描述

手动上传

前端代码编写

<template><div><h1>图片手动提交</h1><el-form:model="productForm"style="width: 500px"label-width="120px"label-position="right"><!-- 用户基础信息 --><el-form-item label="商品名称" prop="productName"><el-input v-model="productForm.productName"></el-input></el-form-item><el-form-item label="封面图片"><!-- :auto-upload 设置是否自动上传 true自动上传 --><!-- action为你的请求路径:你要替换为你的上传API地址 --><!--  list-type="picture-card" 文件列表的类型 这里不需要因为已经有<i class="el-icon-plus" v-if="!productForm.imageUrl"></i>代替了--><!-- :show-file-list="false" 是否显示已上传文件列表 这里关闭 --><!-- v-if="!productForm.imageUrl" 是如果上传成功这个+图标(<i class="el-icon-plus"></i>)上传的提示就不显示了 --><el-upload:auto-upload="false"action="#":show-file-list="false":on-change="handleImgChange"><istyle="font-size: 20px; border: 1px solid #ccc; padding: 20px"class="el-icon-plus"v-if="!productForm.imageUrl"></i><img style="width: 100px" v-else :src="productForm.imageUrl" /></el-upload><!-- v-if="productForm.imageUrl" 如果图片不存在 img不显示 --><!-- <img v-if="imgURL" :src="imgURL" /> --></el-form-item><el-form-item label="商品价格" prop="productPrice"><el-input-numberv-model="productForm.productPrice":precision="2":step="0.01"></el-input-number></el-form-item><el-form-item label="商品库存" prop="productStock"><el-input-numberv-model="productForm.productStock"label="描述文字"></el-input-number></el-form-item><!-- 操作按钮 --><el-form-item><el-button type="primary" @click="submitForm">提交</el-button></el-form-item></el-form></div>
</template><script>
import axios from "axios";export default {name: "ImageUpload",data() {return {// 表单数据// 注意这里表单不能有字段为null,否则会报错// 比如productId: null, 发送给后端报错productForm: {productId: "",productName: "",imageUrl: "",productPrice: "",productStock: "",imgUrlFile: ""}};},methods: {// handleFileChange(file, fileList) {//   this.fileList = fileList;// },// 提交前实现封面图片预览handleImgChange(uploadFile) {// 预览图片// this.imgUrl = URL.createObjectURL(uploadFile.raw);this.productForm.imageUrl = URL.createObjectURL(uploadFile.raw);console.log(this.productForm.imageUrl);this.productForm.imgUrlFile = uploadFile.raw;// this.productForm.imageUrl = uploadFile.raw;},async submitForm() {const formData = new FormData();// 追加其他表单字段// 遍历 productForm 对象的属性for (const key in this.productForm) {// 将每个属性和值添加到 FormData 中formData.append(key, this.productForm[key]);}// 追加文件字段formData.append("file", this.imgUrlFile);this.clgFromData(formData);const res = await axios.post("http://localhost:8080/product/addProductWithImg",formData// 下面的headers可以不,会自动识别是json还是formdata// {//   headers: {//     "Content-Type": "multipart/form-data"//   }// });console.log(res);},clgFromData(formData) {for (let pair of formData.entries()) {console.log(pair[0] + ", " + pair[1]);}}}
};
</script><style scoped></style>

后端代码编写

package com.hsh.controller;import com.hsh.pojo.Product;
import com.hsh.pojo.tdo.ResultJSON;
import com.hsh.service.ProductService;
import com.hsh.utils.AliOssUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;import java.io.IOException;
import java.util.List;
import java.util.UUID;@RestController
@RequestMapping("/product")
@CrossOrigin(origins = "http://localhost:8081")
public class ProductController {@AutowiredProductService productService;@PostMapping("/addProduct")public ResultJSON addProduct(@RequestBody Product product){System.out.println("product = " + product);return productService.addProduct(product);}// 注意 传入的product对象的属性不能是 null 也不能是 MultipartFile,否则报400的错误// 注意:java的product对象中,没有imgUrlFile属性。// 前端传入的product对象中,imgUrlFile属性是MultipartFile类型。@PostMapping("/addProductWithImg")public ResultJSON<Product> findProductById(@ModelAttribute Product product,@RequestParam(value = "imgUrlFile",required = false) MultipartFile imgUrlFile) throws IOException {System.out.println("product = " + product);System.out.println("imgFile = " + imgUrlFile);if (imgUrlFile == null || imgUrlFile.isEmpty()) {// 处理文件为空的情况return ResultJSON.error("文件不能为空");}String originalFilename = imgUrlFile.getOriginalFilename();// 生成新的唯一的文件名String fileNmae = UUID.randomUUID().toString() + originalFilename.substring(originalFilename.lastIndexOf("."));String url = AliOssUtil.uploadFile(fileNmae, imgUrlFile.getInputStream());System.out.println(url);product.setImageUrl(url);return productService.addProduct(product);}}

结果演示如下

在这里插入图片描述

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

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

相关文章

香港云主机常见使用问题汇总

本文主要为初次或正在接触香港云主机的用户介绍&#xff0c;对于香港云服务器的一些问题进行解答&#xff0c;帮助用户更好的了解香港云主机&#xff0c;熟悉香港云主机。1.香港云主机是否需要备案?香港云主机无需进行像内地服务器那样的 ICP 备案&#xff0c;可直接部署使用。…

JAVA同城打车小程序APP打车顺风车滴滴车跑腿源码微信小程序打车源码

JAVA同城打车系统源码&#xff1a;多端融合的智能出行生态解决方案一、市场需求与行业背景在共享经济蓬勃发展和数字化转型加速的背景下&#xff0c;中国同城出行市场正迎来快速增长期。2025年中国同城出行市场规模预计突破8000亿元&#xff0c;年复合增长率超过25%。基于Sprin…

AI入坑: Trae 通过http调用.net 开发的 mcp server

1. 为什么要写这个 为什么要写这个内容&#xff0c;前几天开始加入到ai大军&#xff0c;通过一周的学习&#xff0c;看了国外网站、看了b站教程、看了抖音教程&#xff0c;居然发现都是开发在本地的mcp server。本地mcp没问题&#xff0c;个人使用都ok&#xff0c;或者通过npx下…

记录Pycharm所使用虚拟环境与终端无法对应

在anaconda安装时&#xff0c;本文中的安装位置在D盘&#xff0c; D:\soware\anaconda 理论环境位置 D:\soware\anaconda\envs 经检查PATH配置均未发现错误&#xff0c;其次问题并不在于Pycharm的设置中解译器与终端的设置经过多次查找未发现可用解决方案 在anaconda建立虚拟环…

国产数据库之YashanDB:新花怒放

YashanDB&#xff08;崖山数据库&#xff09;是由深圳计算科学研究院自主研发的一款新型关系数据库管理系统。 YashanDB 在经典数据库理论基础上&#xff0c;融入了原创的有界计算、近似计算、并行可扩展和跨模融合计算理论&#xff0c;可以满足金融、政企、能源等关键行业对高…

Java基础 9.5

1.异常处理基本介绍异常处理就是当异常发生的时候 对异常处理的方式异常处理方式try-catch-finally程序员在代码中捕获发生的异常 自行处理throws将发生的异常抛出 交给调用者&#xff08;方法&#xff09;处理 最顶级的处理者是JVM示意图2.try-catch方式处理异常说明Java提供t…

B.50.10.06-NoSQL数据库与电商应用

NoSQL数据库核心原理与电商应用实战核心思想: NoSQL (Not Only SQL) 数据库是为了解决传统关系型数据库在超大规模数据、高并发和灵活数据模型方面的不足而设计的。它们通过牺牲部分一致性&#xff08;通常是最终一致性&#xff09;和事务的严格性&#xff0c;来换取极高的性能…

把开发环境丢云上,我的电脑风扇再也没转过!

Hello&#xff0c;兄弟们&#xff0c;我来啦作为一个天天搬砖的程序员&#xff0c;每天最让我心态爆炸的是啥&#xff1f;不是产品又改需求&#xff0c;也不是 Bug 藏得深&#xff0c;而是TMD——配&#xff01;环&#xff01;境&#xff01;新项目 git clone 下来&#xff0c;…

驱动ft232h通信

FT232H是一个单通道USB 2.0高速&#xff08;480Mb/s&#xff09;转换为UART/FIFO IC&#xff0c;具有多种工业标准串行或并行接口配置能力。 1.实验板卡 FPGA型号&#xff1a; FT232H型号&#xff1a; FT232H SINGLE CHANNEL HI-SPEED USB TO MULTIPURPOSE UART/FIFO IC Da…

隔空盗刷、AI钓鱼、代理劫持…金融黑产竟进化至此?

【导读】中国工商银行发布的《2024网络金融黑产研究报告》&#xff0c;以深度洞察拆解黑产攻击“新变种”、勾勒防护新路径&#xff0c;自发布以来&#xff0c;成为金融安全行业的重要参考坐标。本文会提炼出报告中黑产攻击的五大技术演变与体系化防护思路&#xff0c;再结合金…

服务器为啥离不开传感器?一文看懂数据中心“隐形守护者”的关键角色

在现代数据中心或企业机房中&#xff0c;服务器不仅仅是“跑程序”的机器&#xff0c;它们还是一整套复杂系统的一部分。为了保证这些服务器稳定、高效、安全地运行&#xff0c;传感器成了不可或缺的角色。那么&#xff0c;服务器为啥要有传感器&#xff1f;这些传感器到底是干…

React JSX 语法讲解

&#x1f680; React JSX 语法讲解 1. 课程概述 本课程旨在系统讲解 JSX&#xff08;JavaScript XML&#xff09; 的核心概念与实战应用。JSX 是 React 的核心语法扩展&#xff0c;它允许我们在 JavaScript 中编写类似 HTML 的结构&#xff0c;使得构建用户界面变得直观和高效。…

软件安装教程(四):在 Windows 上安装与配置 MATLAB(超详细)

文章目录前言1. 安装前准备&#xff08;必看&#xff09;2. 下载 MATLAB&#xff08;推荐在线安装&#xff09;3. 在 Windows 上安装&#xff08;详细步骤&#xff09;4. 激活 MATLAB&#xff08;在线与离线&#xff09;5. 首次启动与界面入门6. 推荐的基本配置&#xff08;让环…

【运维自动化-标准运维】如何创建流程嵌套(子流程)

什么是子流程节点 标准运维里的流程节点有两类&#xff1a;标准插件节点和子流程节点。子流程节点实际上也是一个流程&#xff0c;比如某个业务线做全网更新时需要更新多个模块&#xff0c;那每个模块的更新流程可以称之为一个子流程。在总流程里直接添加子流程&#xff0c;就通…

clickhouse迁移工具clickhouse-copier

原来的集群没有高可用而且配置很低&#xff0c;所有准备将一个3分片1副本集群迁到1分片2副本的高配置集群&#xff0c;数据量比较大。 虽然官方已经标记clickhouse-copier已经过时&#xff0c;但为了方便和高效还是用了copier&#xff0c;效果还挺好 以下是使用步骤&#xff1a…

高频超声波传感器:以精准感知重塑未来科技生态

在智能制造的浪潮中&#xff0c;高频超声波传感器正以“隐形工程师”的角色&#xff0c;重新定义着工业检测、医疗诊断与环境监测的边界。这款融合了压电材料科学与微纳电子技术的精密仪器&#xff0c;凭借其亚毫米级测量精度与纳秒级响应速度&#xff0c;正在成为高端装备制造…

残差连接与归一化结合应用

残差连接&#xff08;Residual Connection / Skip Connection&#xff09;和归一化&#xff08;Normalization&#xff09;的结合&#xff0c;是现代深度学习模型&#xff08;尤其是深度神经网络和Transformer架构&#xff09;成功的关键因素之一。 核心概念回顾残差连接 (Resi…

K8s集群+Rancher Server:部署DolphinScheduler 3.2.2集群

本文手把手演示了如何在 K8s Rancher 环境中快速拉起一套生产可用的 Apache DolphinScheduler 3.2.2 集群。全文围绕“镜像加速、依赖本地化、存储持久化”三大痛点展开&#xff0c;附有详细的代码解析&#xff0c;收藏细看吧&#xff01; 环境准备 1、软件准备2、环境规划部署…

查询语言的进化:SQL之后,为什么是GQL?数据世界正在改变

数据是现代世界的核心驱动力。 在数据驱动的世界里&#xff0c;查询语言就像人与数据沟通的桥梁。 如何高效地获取、操作和理解数据&#xff0c;取决于查询语言的演进。 自20世纪70年代关系型数据库兴起以来&#xff0c;SQL&#xff08;Structured Query Language&#xff0…

AgentThink:一种在自动驾驶视觉语言模型中用于工具增强链式思维推理的统一框架

文章目录摘要1. 引言2. 相关工作2.1 自动驾驶中的语言模型2.2 自动驾驶中的视觉问答3. 方法3.1 数据生成流水线3.2 两阶段训练流程3.2.1 基于 SFT 的推理预热3.2.2 基于 RLFT 的推理增强3.3 推理与评估4. 实验4.1 主要实验结果4.2 工具使用分析4.3 消融实验4.4 泛化性评估5. 结…