【前端】Axios AJAX Fetch
不定期更新,建议关注收藏点赞。
目录
- Axios
- AJAX
- CORS 允许跨域请求
- Fetch
Axios
axios是一个基于Promise的 JavaScript HTTP 客户端,用于浏览器和 Node.js 中发送 HTTP 请求。它提供了一个简单的 API 来发起请求,并处理请求的结果。axios主要用于与服务器进行数据交互,比如发送 GET、POST、PUT、DELETE 请求等。相比于浏览器原生的fetchAPI,axios提供了更多的功能和便利,特别是在处理请求和响应时。
axios.get('/api/todolist')
.then((res)=>{console.log(res.data);this.setState(()=>{return {list: [...res.data]}})
.catch(()=>{alert('error')})
}
- 安装
axios
如果你使用的是 Node.js 或者 React 等项目,首先需要通过 npm 或 yarn 安装 axios。
# 使用 npm 安装
npm install axios# 使用 yarn 安装
yarn add axios
- 基本用法
axios 提供了多种方法来发送 HTTP 请求,包括 axios.get()、axios.post()、axios.put()、axios.delete()等。
发送 GET 请求
import axios from 'axios';axios.get('https://api.example.com/data').then(response => {console.log(response.data); // 响应数据}).catch(error => {console.error('Error fetching data:', error);});
get方法用于发送 GET 请求。response.data包含了从服务器返回的数据。
发送 POST 请求
import axios from 'axios';const data = {name: 'John Doe',email: 'john@example.com'
};axios.post('https://api.example.com/users', data).then(response => {console.log('User created:', response.data);}).catch(error => {console.error('Error posting data:', error);});
post方法用于发送 POST 请求。- 请求体中的数据(
data)会被发送到服务器。
发送 PUT 请求
import axios from 'axios';const updatedData = {name: 'Jane Doe',email: 'jane@example.com'
};axios.put('https://api.example.com/users/1', updatedData).then(response => {console.log('User updated:', response.data);}).catch(error => {console.error('Error updating data:', error);});
put方法用于发送 PUT 请求。它通常用于更新现有的资源。
发送 DELETE 请求
import axios from 'axios';axios.delete('https://api.example.com/users/1').then(response => {console.log('User deleted:', response.data);}).catch(error => {console.error('Error deleting data:', error);});
delete方法用于删除指定的资源。
- 请求配置
axios 支持配置请求的各个方面,如 headers、params、timeout 等。你可以通过第二个参数传递一个配置对象来设置这些选项。
示例:设置请求头
import axios from 'axios';axios.get('https://api.example.com/data', {headers: {'Authorization': 'Bearer your_token_here'}
}).then(response => {console.log(response.data);}).catch(error => {console.error('Error:', error);});
示例:设置请求超时
import axios from 'axios';axios.get('https://api.example.com/data', {timeout: 5000 // 设置超时时间为 5 秒
}).then(response => {console.log(response.data);}).catch(error => {if (error.code === 'ECONNABORTED') {console.log('Request timeout');} else {console.error('Error:', error);}});
- 拦截器(Interceptors)
axios 提供了拦截器机制,使得你可以在请求发送之前或响应返回之后执行一些逻辑。
请求拦截器
import axios from 'axios';axios.interceptors.request.use(config => {console.log('Request Interceptor:', config);// 在发送请求之前做些什么,比如添加 token 等config.headers['Authorization'] = 'Bearer your_token_here';return config;
}, error => {return Promise.reject(error);
});
响应拦截器
import axios from 'axios';axios.interceptors.response.use(response => {console.log('Response Interceptor:', response);return response;
}, error => {console.error('Response Error:', error);return Promise.reject(error);
});
- 请求拦截器可以在请求发送之前修改请求的配置。
- 响应拦截器可以在响应返回之后处理响应数据或者捕获错误。
- 取消请求
有时你可能需要取消一个正在进行的请求,axios 提供了 CancelToken 来实现这一功能。
import axios from 'axios';const cancelToken = axios.CancelToken;
const source = cancelToken.source();axios.get('https://api.example.com/data', {cancelToken: source.token
}).then(response => {console.log(response.data);}).catch(error => {if (axios.isCancel(error)) {console.log('Request canceled:', error.message);} else {console.error('Error:', error);}});// 取消请求
source.cancel('Operation canceled by the user.');
- 并发请求
axios 还可以让你同时发送多个请求,并在它们全部完成后进行处理,使用 axios.all 和 axios.spread 来实现。
import axios from 'axios';const request1 = axios.get('https://api.example.com/data1');
const request2 = axios.get('https://api.example.com/data2');axios.all([request1, request2]).then(axios.spread((response1, response2) => {console.log('Response 1:', response1.data);console.log('Response 2:', response2.data);})).catch(error => {console.error('Error:', error);});
- 处理错误
axios 会将所有错误统一通过 catch 捕获。你可以通过 error.response 来访问服务器返回的错误信息。
import axios from 'axios';axios.get('https://api.example.com/data').then(response => {console.log(response.data);}).catch(error => {if (error.response) {// 服务器返回了响应console.error('Response error:', error.response);} else if (error.request) {// 请求已发出但没有收到响应console.error('Request error:', error.request);} else {// 发生了其他错误console.error('Error:', error.message);}});
- axios v.s. AJAX v.s. fetch
axios 在前端开发中具有较高的使用率,fetch 作为原生 API 也被广泛采用,而 XMLHttpRequest 的使用率相对较低。
| 特性 | AJAX (XMLHttpRequest) | Fetch API | Axios |
|---|---|---|---|
| 基于 | 回调函数 | Promise | Promise |
| 请求响应处理 | 需要手动管理请求状态和解析响应 | 自动解析 JSON,但仍需要手动处理错误 | 自动解析 JSON,无需手动处理响应数据 |
| 请求和响应拦截器 | 无 | 无 | 支持请求和响应拦截器 |
| 跨域请求 | 需要额外配置 CORS 头 | 需要额外配置 CORS 头 | 支持自动处理跨域请求(需要后端支持) |
| 请求取消 | 需要使用 AbortController | 需要使用 AbortController | 支持请求取消,直接使用 CancelToken |
| 浏览器兼容性 | 在所有浏览器中都能工作,但老旧浏览器不支持 | 大多数现代浏览器支持,但 IE 需要 polyfill | 支持现代浏览器和 IE(需要 polyfill) |
| 支持的功能 | 基本的 HTTP 请求功能 | 基本的 HTTP 请求功能 | 更丰富的功能:请求/响应拦截器、取消请求等 |
| 使用难度 | 相对较复杂,需要手动管理请求状态和响应解析 | 简单,支持 Promise,且 API 直观 | 简单,且有更多的功能和配置选项 |
- axios与python requests库
| 功能 | Axios (JavaScript) | Requests (Python) |
|---|---|---|
| 异步操作 | 基于 Promise,支持 async/await | 同步请求,需要配合 aiohttp 异步库 |
| 自动解析响应 | 自动解析 JSON | 自动解析 JSON |
| 请求拦截器/响应拦截器 | 支持请求和响应拦截器 | 不支持直接的拦截器功能 |
| 取消请求 | 支持 CancelToken 来取消请求 | 无原生支持取消请求 |
| 跨域请求 | 处理跨域请求(CORS) | 不涉及浏览器,跨域由后端控制 |
| 浏览器支持 | 支持现代浏览器 | 仅支持 Python 环境 |
低级 HTTP 请求通常是指在较低的抽象层次上进行的 HTTP 请求,通常需要开发者手动处理许多细节,例如请求头、参数、响应处理、编码等。相比高级 HTTP 请求,低级 HTTP 请求提供了更多的灵活性和控制,但也要求开发者更了解底层的 HTTP 协议和细节。
python中类似的库:requests、httpx、aiohttp、urllib、pycurl、tornado,后端开发使用。
AJAX
AJAX(Asynchronous JavaScript and XML)本身并不属于 HTML。它是一个基于 JavaScript 的技术,用于实现网页的异步请求和更新。因此,AJAX 更准确地说是 JavaScript 技术,而不是 HTML 技术。
AJAX(Asynchronous JavaScript and XML)是一个用于创建动态和交互式网页的技术,它允许网页在不重新加载整个页面的情况下,与服务器交换数据并更新部分网页内容。这种方式能提高用户体验,因为它使得网页加载更加流畅,用户可以与页面进行交互,而无需等待页面的完全刷新。
尽管它的名字中有 “XML”,但现在 AJAX 主要用于通过 JSON(JavaScript Object Notation)与服务器交换数据。不过,它也支持通过 XML、HTML 或纯文本等格式进行数据交换。
- AJAX 的工作原理
AJAX 允许浏览器在后台发送 HTTP 请求到服务器,获取数据并在不刷新页面的情况下更新网页内容。通常,AJAX 使用 JavaScript 与服务器进行通信,通过 XMLHttpRequest 对象或现代的 fetch API 来发送请求。
AJAX 的基本流程如下:
用户发起请求(例如,点击按钮或加载页面时)。
JavaScript 使用 XMLHttpRequest 或 fetch() 向服务器发送请求(GET、POST 等)。
服务器接收请求,处理数据,并返回响应。
JavaScript 处理服务器返回的数据,并更新页面内容。
什么是 XMLHttpRequest 对象?
XMLHttpRequest 对象用于在后台与服务器交换数据。
XMLHttpRequest 对象能够:
在不重新加载页面的情况下更新网页
在页面已加载后从服务器请求数据
在页面已加载后从服务器接收数据
在后台向服务器发送数据
responseText 只适用于文本响应。如果服务器返回的是 JSON 或 XML 数据,可以使用 JSON.parse(req.responseText) 来将其转换为 JavaScript 对象,或使用 req.responseXML 获取 XML 格式的响应。
readyState 表示当前请求的状态。
XMLHttpRequest 的请求生命周期有 5 个阶段(0 到 4),表示请求的不同状态:
0 - UNSENT:对象已创建,但尚未调用 open() 方法。
1 - OPENED:已调用 open(),但尚未调用 send()。
2 - HEADERS_RECEIVED:已发送请求,并且已接收到响应头。
3 - LOADING:正在下载响应体。
4 - DONE:响应已完全下载,处理完成。
status 表示 HTTP 响应的状态码。
- 例子
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>AJAX Example</title>
</head>
<body><h1>AJAX Example</h1><button id="loadData">Load Data</button><div id="result"></div> <!-- 结果将显示在这里 --><script src="app.js"></script>
</body>
</html>
// 获取按钮和结果展示区域
const button = document.getElementById('loadData');
const result = document.getElementById('result');// 添加点击事件监听器
button.addEventListener('click', function() {// 创建一个新的 XMLHttpRequest 对象const xhr = new XMLHttpRequest();// 配置请求:GET 请求,指向一个 JSON 文件xhr.open('GET', 'data.json', true); // 异步请求// 设置 onload 事件处理函数xhr.onload = function() {if (xhr.status === 200) { // 如果请求成功const data = JSON.parse(xhr.responseText); // 解析返回的 JSON 数据result.innerHTML = `Message: ${data.message}`; // 显示结果} else {result.innerHTML = 'Error loading data';}};// 发送请求xhr.send();
});
XMLHttpRequest对象的open()方法有3个参数,第一个参数指定是GET还是POST,第二个参数指定URL地址,第三个参数指定是否使用异步,默认是true,所以不用写。
注意,尽量不要把第三个参数指定为false,否则浏览器将停止响应,直到AJAX请求完成。如果这个请求耗时10秒,那么10秒内你会发现浏览器处于“假死”状态。
最后调用send()方法才真正发送请求。GET请求不需要参数,POST请求需要把body部分以字符串或者FormData对象传进去。
- 上面代码的URL使用的是相对路径。如果你把它改为’http://www.sina.com.cn/',再运行,肯定报错。在Chrome的控制台里,还可以看到错误信息。
这是因为浏览器的同源策略导致的。默认情况下,JavaScript在发送AJAX请求时,URL的域名必须和当前页面完全一致。
完全一致的意思是,域名要相同(www.example.com和example.com不同),协议要相同(http和https不同),端口号要相同(默认是:80端口,它和:8080就不同)使用 JavaScript 请求外域(即跨域请求)时,通常会遇到 跨域资源共享 (CORS, Cross-Origin Resource Sharing) 的限制。默认情况下,浏览器会阻止网页发起跨域请求,以保护用户的安全。为了绕过这个限制,目标网站必须明确允许你的域名进行请求。
CORS 允许跨域请求
用JavaScript怎么请求外域(就是其他网站)的URL了呢?
- 使用 fetch() API(推荐)
现代浏览器支持 fetch(),可以发起跨域请求,但前提是目标网站支持 CORS。如果目标网站没有明确设置允许跨域访问,那么请求会被浏览器阻止。如果目标网站支持 CORS 并正确设置了头部(例如 Access-Control-Allow-Origin),请求就会成功。
fetch('https://example.com/data', {method: 'GET', // 或者 'POST',取决于你的请求类型headers: {'Content-Type': 'application/json'},mode: 'cors' // 必须设置为 'cors',表示进行跨域请求
}).then(response => response.json()) // 解析 JSON 数据.then(data => console.log(data)) // 处理返回的响应.catch(error => console.error('Error:', error)); // 错误处理fetch('https://example.com').then(response => {if (!response.ok) {throw new Error('Network response was not ok');}return response.text(); // 将响应转换为文本(HTML)}).then(html => {console.log(html); // 打印出返回的 HTML 文本}).catch(error => {console.error('There has been a problem with your fetch operation:', error);});
- 使用 XMLHttpRequest(旧版)
XMLHttpRequest 是发起 HTTP 请求的传统方式,它也可以用于发起跨域请求,但依赖于目标网站的 CORS 设置。
var xhr = new XMLHttpRequest();
xhr.open('GET', 'https://example.com/data', true);
xhr.setRequestHeader('Content-Type', 'application/json');
xhr.onreadystatechange = function () {if (xhr.readyState === 4 && xhr.status === 200) {console.log(JSON.parse(xhr.responseText));}
};
xhr.send();
Fetch
- 例子:使用 fetch() API 替代 XMLHttpRequest
fetch() 是现代浏览器提供的一个 API,使用 Promise,比 XMLHttpRequest 更简洁,更强大的功能:fetch() 支持更多的功能,如设置请求头、控制超时等。并且它默认支持异步操作。这里是相同请求的 fetch() 版本:
const button = document.getElementById('loadData');
const result = document.getElementById('result');button.addEventListener('click', function() {// 使用 fetch 发起请求fetch('data.json').then(response => response.json()) // 解析返回的 JSON.then(data => {result.innerHTML = `Message: ${data.message}`; // 显示数据}).catch(error => {result.innerHTML = 'Error loading data';console.error(error);});
});
相关文章:
【前端】Axios AJAX Fetch
不定期更新,建议关注收藏点赞。 目录 AxiosAJAXCORS 允许跨域请求 Fetch Axios axios 是一个基于 Promise 的 JavaScript HTTP 客户端,用于浏览器和 Node.js 中发送 HTTP 请求。它提供了一个简单的 API 来发起请求,并处理请求的结果。axios …...
测试面试题:以一个登录窗口为例,设计一下登录界面测试的思路和方法
在测试登录窗口时,可以从 表单测试、 逻辑判断和 业务流程三个方面设计测试思路和方法。以下是一个详细的测试方案: 1. 表单测试 表单测试主要关注输入框、按钮等UI元素的正确性和用户体验。 测试点: 输入框测试 用户名和密码输入框是否正常显示。输入框是否支持预期的字符类…...
Android之图片保存相册及分享图片
文章目录 前言一、效果图二、实现步骤1.引入依赖库2.二维码生成3.布局转图片保存或者分享 总结 前言 其实现在很多分享都是我们自定义的,更多的是在界面加了很多东西,然后把整个界面转成图片保存相册和分享,而且现在分享都不需要第三方&…...
EX_25/2/24
写一个三角形类,拥有私有成员 a,b,c 三条边 写好构造函数初始化 abc 以及 abc 的set get 接口 再写一个等腰三角形类,继承自三角形类 1:写好构造函数,初始化三条边 2:要求无论如何,等腰三角形类对象&#x…...
ElasticSearch公共方法封装
业务场景 1、RestClientBuilder初始化(同时支持单机与集群) 2、发送ES查询请求公共方法封装(支持sql、kql、代理访问、集群访问、鉴权支持) 3、判断ES索引是否存在(/_cat/indices/${indexName}) 4、判断ES…...
JVM之JVM的组成
Java 虚拟机(JVM)是 Java 程序的运行核心,它主要由类加载系统、运行时数据区、执行引擎和本地方法接口这几个关键部分组成。 类加载系统(Class Loading System) 类加载系统负责在程序运行时动态地将 Java 类加载到 J…...
贪心算法
int a[1000], b5, c8; swap(b, c); // 交换操作 memset(a, 0, sizeof(a)); // 初始化为0或-1 引导问题 为一个小老鼠准备了M磅的猫粮,准备去和看守仓库的猫做交易,因为仓库里有小老鼠喜欢吃的五香豆,第i个房间有J[i] 磅的五香豆…...
Linux下安装中文输入法总结
Linux下安装中文输入法总结_linux 微软拼音-CSDN博客文章浏览阅读4.2w次,点赞21次,收藏92次。众所周知,fcitx和ibus是两款很好用的Linux中文输入法框架。下面来说一下其安装方法以及会踩的坑。首先fcitx和ibus是不能共存的,两者只…...
人工智能(AI):科技新纪元的领航者
摘要 人工智能(AI)作为当今科技领域最具变革性的力量之一,正以惊人的速度重塑着我们的世界。本文旨在全面且专业地介绍人工智能,涵盖其定义、发展历程、关键技术、应用领域、面临的挑战以及未来展望等方面,以期为读者…...
c3p0、Druid连接池+工具类 Apache-DbUtils (详解!!!)
数据库连接池是在应用程序启动时创建一定数量的数据库连接,并将这些连接存储在池中。当应用程序需要与数据库通信时,它可以向池中请求一个连接,使用完后将连接归还给池,而不是关闭连接。这样可以减少创建和关闭连接的开销…...
鸿蒙开发深入浅出03(封装通用LazyForEach实现懒加载)
鸿蒙开发深入浅出03(封装通用LazyForEach实现懒加载) 1、效果展示2、ets/models/BasicDataSource.ets3、ets/models/HomeData.ets4、ets/api/home.ets5、ets/pages/Home.ets6、ets/views/Home/SwiperLayout.ets7、后端代码 1、效果展示 2、ets/models/Ba…...
AWS - Redshift - 外部表读取 Parquet 文件中 timestamp 类型的数据
问题: 通过 Redshift Spectrum 功能可以读取 S3 中的文件,当读取 Parquet 文件时,如果列格式设置为 timestamp, 通过 psql 客户端读取会出现以下错误: testdb# select * from myspectrum_schema_0219.test_ns; ERROR…...
Ubuntu20.04之VNC的安装使用与常见问题
Ubuntu20.04之VNC的安装与使用 安装图形桌面选择安装gnome桌面选择安装xface桌面 VNC-Server安装配置开机自启 VNC Clientroot用户无法登入问题临时方案永久方案 安装图形桌面 Ubuntu20.04主流的图形桌面有gnome和xface两种,两种桌面的安装方式我都会写,…...
vue3学习3-route
创建路由器: 应用路由器: 路由展示区RouterView 和 路由跳转RouterLink: 路由组件(在路由配置文件中配置的)一般放到pages/views文件夹下 路由组件切换的时候执行的是 挂载/卸载操作 onMounted / onUnmouted 路由器两…...
C++:dfs,bfs各两则
1.木棒 167. 木棒 - AcWing题库 乔治拿来一组等长的木棒,将它们随机地砍断,使得每一节木棍的长度都不超过 5050 个长度单位。 然后他又想把这些木棍恢复到为裁截前的状态,但忘记了初始时有多少木棒以及木棒的初始长度。 请你设计一个程序…...
RK Android11 WiFi模组 AIC8800 驱动移植流程
RK Android WiFi模组 AIC8800 驱动移植流程 作者:Witheart更新时间:20250220 概要:本文介绍了基于 AIC8800D40 芯片的 WiFi6 模组 BL-M8800DS2-40 在 RK3568 平台上的驱动移植流程。主要涉及环境搭建、驱动代码分析、设备树修改、驱动编译配…...
深度学习-6.用于计算机视觉的深度学习
Deep Learning - Lecture 6 Deep Learning for Computer Vision 简介深度学习在计算机视觉领域的发展时间线 语义分割语义分割系统的类型上采样层语义分割的 SegNet 架构软件中的SegNet 架构数据标注 目标检测与识别目标检测与识别问题两阶段和一阶段目标检测与识别两阶段检测器…...
免费送源码:ava+springboot+MySQL 基于springboot 宠物医院管理系统的设计与实现 计算机毕业设计原创定制
摘 要 在当今社会,宠物已经成为人们生活中不可或缺的一部分,因此宠物健康和医疗问题也备受关注。为了更好地管理宠物医院的日常运营和提供优质的医疗服务,本研究设计并实现了一套基于Spring Boot框架的宠物医院管理系统。这一系统集成了多项功…...
【电机控制器】ESP32-C3语言模型——DeepSeek
【电机控制器】ESP32-C3语言模型——DeepSeek 文章目录 [TOC](文章目录) 前言一、简介二、代码三、实验结果四、参考资料总结 前言 使用工具: 提示:以下是本篇文章正文内容,下面案例可供参考 一、简介 二、代码 #include <Arduino.h&g…...
小型字符级语言模型的改进方向和策略
小型字符级语言模型的改进方向和策略 一、回顾小型字符级语言模型的处理流程 前文我们已经从零开始构建了一个小型字符级语言模型,那么如何改进和完善我们的模型呢?有哪些改进的方向?我们先回顾一下模型的流程: 图1 小型字符级语言模型的处理流程 (1)核心模块交互过程:…...
最新SpringBoot+SpringCloud+Nacos微服务框架分享
文章目录 前言一、服务规划二、架构核心1.cloud的pom2.gateway的异常handler3.gateway的filter4、admin的pom5、admin的登录核心 三、code-helper分享总结 前言 最近有个活蛮赶的,根据Excel列的需求预估的工时直接打骨折,不要问我为什么,主要…...
苍穹外卖--缓存菜品
1.问题说明 用户端小程序展示的菜品数据都是通过查询数据库获得,如果用户端访问量比较大,数据库访问压力随之增大 2.实现思路 通过Redis来缓存菜品数据,减少数据库查询操作。 缓存逻辑分析: ①每个分类下的菜品保持一份缓存数据…...
12.找到字符串中所有字母异位词
🧠 题目解析 题目描述: 给定两个字符串 s 和 p,找出 s 中所有 p 的字母异位词的起始索引。 返回的答案以数组形式表示。 字母异位词定义: 若两个字符串包含的字符种类和出现次数完全相同,顺序无所谓,则互为…...
Map相关知识
数据结构 二叉树 二叉树,顾名思义,每个节点最多有两个“叉”,也就是两个子节点,分别是左子 节点和右子节点。不过,二叉树并不要求每个节点都有两个子节点,有的节点只 有左子节点,有的节点只有…...
项目部署到Linux上时遇到的错误(Redis,MySQL,无法正确连接,地址占用问题)
Redis无法正确连接 在运行jar包时出现了这样的错误 查询得知问题核心在于Redis连接失败,具体原因是客户端发送了密码认证请求,但Redis服务器未设置密码 1.为Redis设置密码(匹配客户端配置) 步骤: 1).修…...
C++课设:简易日历程序(支持传统节假日 + 二十四节气 + 个人纪念日管理)
名人说:路漫漫其修远兮,吾将上下而求索。—— 屈原《离骚》 创作者:Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder😊) 专栏介绍:《编程项目实战》 目录 一、为什么要开发一个日历程序?1. 深入理解时间算法2. 练习面向对象设计3. 学习数据结构应用二、核心算法深度解析…...
打手机检测算法AI智能分析网关V4守护公共/工业/医疗等多场景安全应用
一、方案背景 在现代生产与生活场景中,如工厂高危作业区、医院手术室、公共场景等,人员违规打手机的行为潜藏着巨大风险。传统依靠人工巡查的监管方式,存在效率低、覆盖面不足、判断主观性强等问题,难以满足对人员打手机行为精…...
逻辑回归暴力训练预测金融欺诈
简述 「使用逻辑回归暴力预测金融欺诈,并不断增加特征维度持续测试」的做法,体现了一种逐步建模与迭代验证的实验思路,在金融欺诈检测中非常有价值,本文作为一篇回顾性记录了早年间公司给某行做反欺诈预测用到的技术和思路。百度…...
Golang——9、反射和文件操作
反射和文件操作 1、反射1.1、reflect.TypeOf()获取任意值的类型对象1.2、reflect.ValueOf()1.3、结构体反射 2、文件操作2.1、os.Open()打开文件2.2、方式一:使用Read()读取文件2.3、方式二:bufio读取文件2.4、方式三:os.ReadFile读取2.5、写…...
Linux部署私有文件管理系统MinIO
最近需要用到一个文件管理服务,但是又不想花钱,所以就想着自己搭建一个,刚好我们用的一个开源框架已经集成了MinIO,所以就选了这个 我这边对文件服务性能要求不是太高,单机版就可以 安装非常简单,几个命令就…...
