电子产品网站建设策划方案好用的快速网站建设平台

web/2025/9/30 20:31:11/文章来源:
电子产品网站建设策划方案,好用的快速网站建设平台,网站去掉index.html,关键词优化怎么写我们传统使用MinIo做OSS对象存储的应用方式往往都是在后端配置与MinIO的连接和文件上传下载的相关接口#xff0c;然后我们在前端调用这些接口完成文件的上传下载机制#xff0c;但是#xff0c;当并发量过大#xff0c;频繁访问会对后端的并发往往会对服务器造成极大的压力…我们传统使用MinIo做OSS对象存储的应用方式往往都是在后端配置与MinIO的连接和文件上传下载的相关接口然后我们在前端调用这些接口完成文件的上传下载机制但是当并发量过大频繁访问会对后端的并发往往会对服务器造成极大的压力大文件传输场景下服务器被迫承担数据中转的角色既消耗大量带宽资源又形成单点性能瓶颈。这时我们引入了MinIO的一种预签名机制。 预签名机制在后端对文件的上传和下载操作生成一个URL前端针对不同的文件操作形式请求会获取到对应的URL这个URL可以理解为一个临时的通行证有了这个URL后前端可以直接向MinIO的服务端发上传和下载的相应请求与MinIO直连操作大大减缓了对后端服务器的压力 1.后端配置 1.1 引入Maven依赖并配置MinIO !--minio-- dependencygroupIdio.minio/groupIdartifactIdminio/artifactId /dependency /** MinIO配置类* Author GuihaoLv*/ Configuration EnableConfigurationProperties(MinIoProperties.class) public class MinIoConfiguration {Autowiredprivate MinIoProperties properties;Beanpublic MinioClient minioClient() {return MinioClient.builder().endpoint(properties.getEndpoint()).credentials(properties.getAccessKey(), properties.getSecretKey()).build();}}1.2 生成预签名接口封装 /**要改成使用预签名URL让前端直接与MinIO交互减轻服务器负担。* 生成上传预签名URLPUT* param fileName* return*/ GetMapping(/presigned-upload-url) ApiOperation(获取上传预签名URL) public ResultString generateUploadUrl(RequestParam(fileName) String fileName) {System.out.println(测试fileName);String url commonFileService.generatePresignedUploadUrl(fileName);System.out.println(结构url);return Result.success(url); }/**要改成使用预签名URL让前端直接与MinIO交互减轻服务器负担。* 生成下载预签名URLGET* param fileName* return*/ GetMapping(/presigned-download-url) ApiOperation(获取下载预签名URL) public ResultString generateDownloadUrl(RequestParam(fileName) String fileName) {String url commonFileService.generatePresignedDownloadUrl(fileName);return Result.success(url); } /**生成上传预签名URLPUT* param fileName* return*/ public String generatePresignedUploadUrl(String fileName) {try {// 安全处理文件名防止路径遍历String safeFileName sanitizeFileName(fileName);// 生成预签名URLPUT方法return client.getPresignedObjectUrl(GetPresignedObjectUrlArgs.builder().method(Method.PUT).bucket(properties.getBucketName()).object(safeFileName).expiry(15, TimeUnit.MINUTES) // 15分钟有效.build());} catch (Exception e) {throw new RuntimeException(生成预签名URL失败, e);} }/*** 生成下载预签名URLGET* param fileName* return*/ public String generatePresignedDownloadUrl(String fileName) {try {String safeFileName sanitizeFileName(fileName);return client.getPresignedObjectUrl(GetPresignedObjectUrlArgs.builder().method(Method.GET).bucket(properties.getBucketName()).object(safeFileName).expiry(1, TimeUnit.HOURS) // 1小时有效.build());} catch (Exception e) {throw new RuntimeException(生成预签名URL失败, e);} }// 文件名安全处理 private String sanitizeFileName(String fileName) {// 过滤非法字符防止路径遍历return fileName.replaceAll([^a-zA-Z0-9-_.], ); } 1.3 前端封装获取预签名和直连MinIO做上传下载的请求 // 获取上传预签名URL export const getPresignedUploadUrl (fileName) {return httpInstance({url: /web/commonFile/presigned-upload-url,method: GET,params: { fileName },}); };// 获取下载预签名URL export const getPresignedDownloadUrl (fileName) {return httpInstance({url: /web/commonFile/presigned-download-url,method: GET,params: { fileName },}); };// 单个文件直传MinIO上传文件 export const uploadViaPresignedUrl async (file: File) {try {// 步骤1: 获取未编码的原始文件名需与后端生成的签名匹配const rawFileName file.name;// 步骤2: 调用后端接口获取预签名URL必须传递原始文件名const resawait getPresignedUploadUrl(rawFileName);const presignedUrlres.data;// 调试输出验证URL格式console.log([DEBUG] 预签名URL:, presignedUrl); // 应输出类似 http://47.99.49.193:9000/...// 步骤3: 直接向MinIO发送PUT请求绕过代理const response await axios.put(presignedUrl, file, {// 关键配置禁用代理和默认请求头baseURL: , // [!code ] 清除默认baseURLheaders: {Content-Type: application/octet-stream // MinIO通用类型}});return response.data;} catch (error) {throw new Error(上传失败: ${(error).response?.data || error.message});} };// 使用预签名URL直连MinIO下载文件 export const downloadViaPresignedUrl async (fileName) {try {// 1. 获取预签名URL调用后端接口生成临时有效的下载URLconst { data: { data: presignedUrl } } await getPresignedDownloadUrl(fileName);// 2. 创建隐藏链接触发下载const link document.createElement(a);link.href presignedUrl; // 设置URLlink.download fileName; // 设置下载文件名需与 MinIO 存储的文件名一致。document.body.appendChild(link); // 将链接添加到DOMlink.click(); // 模拟点击触发下载document.body.removeChild(link); // 移除临时链接return true; // 表示下载已触发} catch (error) {throw new Error(下载失败: error.message); // 统一错误处理} }; 1.4写一个前端页面测试前端直连MinIO的功能实现 script setup langts import { ref } from vue; import {uploadViaPresignedUrl,downloadViaPresignedUrl } from /api/file;// 定义响应式变量 const selectedFile refFile | null(null); // 存储用户选择的文件 const downloadFileName refstring(); // 下载时输入的文件名 const uploadStatus refstring(); // 上传状态提示 const downloadStatus refstring(); // 下载状态提示// 处理文件选择事件 const handleFileChange (event: Event) {const target event.target as HTMLInputElement;if (target.files target.files.length 0) {selectedFile.value target.files[0];uploadStatus.value ; // 重置上传状态} };// 上传文件到MinIO const uploadFile async () {uploadStatus.value 上传中...;await uploadViaPresignedUrl(selectedFile.value);uploadStatus.value 上传成功;selectedFile.value null; // 清空文件选择 }// 下载文件从MinIO const downloadFile async () {downloadStatus.value 正在触发下载...;const success await downloadViaPresignedUrl(downloadFileName.value);if (success) {downloadStatus.value 下载已触发;}}; /scripttemplatediv classcontainer!-- 上传文件部分 --h2测试MinIO文件上传/h2input typefile changehandleFileChange /button clickuploadFile :disabled!selectedFile上传/buttonp{{ uploadStatus }}/p!-- 下载文件部分 --h2测试MinIO文件下载/h2inputv-modeldownloadFileNametypetextplaceholder请输入文件名如 test.jpg/button clickdownloadFile下载/buttonp{{ downloadStatus }}/p/div /template 上传测试结果   下载测试

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

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

相关文章

中企网络科技建站天眼查企业工商查询

高级计算机体系结构-浙江大学计算机系统结构室高级计算机体系结构陈文智 浙江大学计算机学院chenwzzju.edu.cn2014年9月11.1 计算机技术发展综述(1)1946年: 在二次世界大战期间研制成功的世界上第一台电子计算机ENIAC(Electronic Numerical Intergrator andCalculator)正式对…

网站开通flash企查查企业信息查询网页版

树-二叉树、满二叉树和完全二叉树 二叉树的定义: (1)当n0时,为空树; (2)当n>0时,是由一个根结点和称为根结点的左、右子树构成,并且两颗子树互不相交。 满二叉树&…

彩票走势图网站建设网站建设服务外包

文件夹和文件的作用 config:文件的配置: 1.coco.data:存放coco数据集的相关信息,如类别总数,数据集的路径等 2.yolov3.cfg: yolov3的网络架构 data:存放训练集和测试集 1.coco:存放coco训练集和测试集 labels中存放每个照片的标签…

济宁500元网站建设企业app怎么做

👏作者简介:大家好,我是爱敲代码的小王,CSDN博客博主,Python小白 📕系列专栏:python入门到实战、Python爬虫开发、Python办公自动化、Python数据分析、Python前后端开发 📧如果文章知识点有错误…

网站优化seo方案电子商务网站的目的

给定一个二维矩阵,计算其子矩形范围内元素的总和,该子矩阵的左上角为 (row1, col1) ,右下角为 (row2, col2) 。 上图子矩阵左上角 (row1, col1) (2, 1) ,右下角(row2, col2) (4, 3),该子矩形内元素的总和为 8。 示…

做logo图标的网站建设一个图片下载网站

im2double函数,如果输入是 uint8 unit16 或者是二值的logical类型,则函数im2double 将其值归一化到0~1之间。

建手机网站怎么收费中国网站建设公司有哪些方面

发现有一个怪圈,如果码农年龄35+,除非非常匹配,不然在国内企业筛选可能就筛选不过。国外码农可以干到40+、50+。一些外企,对年龄35+的码农依然青睐。这些外企对英文是有要求,通常是要英文自我介绍,下面提供一些英文自我介绍参考。 参考1: Good morning/afternoon, I a…

网站安全设置教程广告软文

气膜建筑在近年来的发展迅速,逐渐替代了一部分传统建筑,展现了良好的市场前景。然而,面对自然环境中的极端天气,如暴风、暴雨和暴雪,气膜建筑是否能够经受住考验是大家关注的焦点。轻空间带您探讨一下这些极端天气对气…

网站友情链接形式上国外网站用什么机箱好

Jenkins 中的清理工作空间 是指在构建完成后,自动删除工作空间中的某些或所有文件,以释放磁盘空间、提高构建效率并确保构建环境的清洁。 清理工作空间的必要性 释放磁盘空间: 随着构建次数的增加,工作空间中的文件会不断累积&…

书店网站建设策划书总结做美剧盗版网站

继续学习最近一直在使用Asp.Net Core SignalR(下面成SignalR Core)为小程序提供websocket支持,前端时间也发了一个学习笔记,在使用过程中稍微看了下它的源码,不得不说微软现在真的强大,很多事情都帮你考虑到了,比如使用Redis,使用Redis后,你的websocket就支持横向扩…

网站开发毕业设计评审表wordpress 优秀作者

一.定时器(timer)的需求 1.执行定时任务的时,主线程不阻塞,所以timer必须至少持有一个线程用于执行定时任务 2.考虑到timer线程资源的合理利用,一个timer需要能够管理多个定时任务,所以timer要支持增删任务…

如何在asp网站甘肃城乡建设厅网站首页

学习感悟一己之言 学习上克服困难实际上是克服心理上或认识上的障碍的过程。所谓的理解,就是化陌生为熟悉。看不懂,一方面是因为接触的材料太陌生,即远离你当前的背景知识;另一方面是材料或讲述者的描述刻画不准确或晦涩不当。有了…

设计公司网站详情wordpress同步到豆瓣

1、Linux集群主要分成三大类( 高可用集群, 负载均衡集群,科学计算集群) 集群是一个统称,他分为好几种,如:高性能科学群集、负载均衡群集、高可用性群集等。 科学群集 、高性能集群(High performance clus…

一般建站需要多少钱天猫购买

PSP个人项目耗时对比记录表:四则运算 Personal Software Process StagesTime(%)Planning7 Estimate9开发76 •需求分析 6 •生成设计文档 7 •设计复审(和同事审核设计文档) 6 •代码规范(为目前的开发制定合适的规范&…

迁安网站开发个人网站 创意

MySQL唯一约束(Unique Key)要求该列唯一,允许为空,但只能出现一个空值。唯一约束可以确保一列或者几列不出现重复值。在创建表时设置唯一约束在定义完列之后直接使用 UNIQUE 关键字指定唯一约束,语法规则如下: UNIQUE创建数据表 t…

连云港网站推广优化广州公司注册处官网

这篇文章解释了当iPhone上的Wi-Fi变灰时,你应该检查并修复的所有事情。 确保飞行模式关闭 这听起来可能很傻,但在执行任何其他操作之前,请确保未打开飞机模式。此功能禁用Wi-Fi(和蜂窝网络),因为它旨在允许你在通常不允许传出无线通信的飞机上使用手机。 查看飞行模式…

贵州网站推广电话dede网站模板怎么安装

1996年6月23日至7月1日,我被点名到四川某单位协助排查某系统的技术问题。 我不懂该系统的原理,也不懂硬件,只能从软件角度分析问题。 那时,我所在单位已经为一家美国公司做了3年的软件第三方独立验证和测试,从中学到…

无锡找做网站wordpress文章编辑器插件

先说句题外话,个人认为,基本上所有的高级语言被设计出来的最终目的是降低软件开发难度,提升软件开发人员素质和团队协作能力,降低软件维护的难度。在学习语言的时候,可以从这么方面来推测各种语言语法设计的原因&#…

成都微信网站建设报价单网站域名可以自己做吗

warning.js:7 Warning: [antdv: Table] Each record in dataSource of table should have a unique key

书法网站建站目标哪些网站是做数据分析的

我将Dropzonejs很好地集成到了我的前端(VueJS)中。如何在Dropzone上手动触发上传文件事件我有验收测试Dropzone使用Webdriver/Codeception的问题。底线是Webdriver需要一个文件输入,因此它也可以附加文件。任何方式手动触发例如悬浮窗内上传?我可以在页面…