AWS 亚马逊 S3存储桶直传 前端demo 复制即可使用

自己踩过坑不想别人也踩坑了 亚马逊S3存储桶直传前端demo复制即可使用

<!DOCTYPE html>
<html lang="zh-CN"><head><meta charset="UTF-8" /><meta name="viewport" content="width=device-width, initial-scale=1.0" /><title>S3 直传示例</title><style>.container {max-width: 600px;margin: 50px auto;padding: 20px;box-shadow: 0 0 10px rgba(0, 0, 0, 0.1);border-radius: 8px;}.upload-area {border: 2px dashed #ccc;padding: 20px;text-align: center;margin: 20px 0;border-radius: 4px;}.upload-area.dragover {background-color: #e1f5fe;border-color: #2196f3;}.progress {margin-top: 20px;display: none;}.progress-bar {height: 20px;background-color: #4caf50;width: 0%;transition: width 0.3s;}.status {margin-top: 10px;color: #666;}</style></head><body><div class="container"><h1>S3 直传示例</h1><div class="upload-area" id="dropZone"><p>拖拽文件到这里或点击选择文件</p><input type="file" id="fileInput" style="display: none" /><button onclick="document.getElementById('fileInput').click()">选择文件</button></div><div class="progress" id="progressContainer"><div class="progress-bar" id="progressBar"></div><div class="status" id="status"></div></div></div><script>const dropZone = document.getElementById("dropZone");const fileInput = document.getElementById("fileInput");const progressContainer = document.getElementById("progressContainer");const progressBar = document.getElementById("progressBar");const status = document.getElementById("status");// 处理拖拽事件["dragenter", "dragover", "dragleave", "drop"].forEach((eventName) => {dropZone.addEventListener(eventName, preventDefaults, false);});function preventDefaults(e) {e.preventDefault();e.stopPropagation();}["dragenter", "dragover"].forEach((eventName) => {dropZone.addEventListener(eventName, highlight, false);});["dragleave", "drop"].forEach((eventName) => {dropZone.addEventListener(eventName, unhighlight, false);});function highlight(e) {dropZone.classList.add("dragover");}function unhighlight(e) {dropZone.classList.remove("dragover");}dropZone.addEventListener("drop", handleDrop, false);fileInput.addEventListener("change", handleFileSelect, false);function handleDrop(e) {const dt = e.dataTransfer;const files = dt.files;handleFiles(files);}function handleFileSelect(e) {const files = e.target.files;handleFiles(files);}async function handleFiles(files) {const file = files[0];if (!file) return;try {// 获取上传配置const response = await fetch(`BASEURL?file_name=${file.name}`);const data = await response.json();if (data.code === 20000) {// 显示进度条progressContainer.style.display = "block";progressBar.style.width = "0%";status.textContent = "开始上传...";// 执行上传const xhr = new XMLHttpRequest();xhr.upload.onprogress = (e) => {if (e.lengthComputable) {const percentComplete = (e.loaded / e.total) * 100;progressBar.style.width = percentComplete + "%";status.textContent = `上传进度: ${Math.round(percentComplete)}%`;}};xhr.onload = () => {if (xhr.status === 200) {status.textContent = "上传成功!";status.style.color = "#4CAF50";} else {status.textContent = "上传失败,请重试";status.style.color = "#f44336";}};xhr.onerror = () => {status.textContent = "上传出错,请重试";status.style.color = "#f44336";};xhr.open(data.data.method, data.data.url);xhr.send(file);} else {throw new Error(data.msg || "获取上传配置失败");}} catch (error) {console.error("上传出错:", error);status.textContent = "上传出错: " + error.message;status.style.color = "#f44336";}}</script></body>
</html>

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

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

相关文章

Python数据可视化科技图表绘制系列教程(四)

目录 带基线的棒棒糖图1 带基线的棒棒糖图2 带标记的棒棒糖图 哑铃图1 哑铃图2 包点图1 包点图2 雷达图1 雷达图2 交互式雷达图 【声明】&#xff1a;未经版权人书面许可&#xff0c;任何单位或个人不得以任何形式复制、发行、出租、改编、汇编、传播、展示或利用本博…

如何有效删除 iPhone 上的所有内容?

“在出售我的 iPhone 之前&#xff0c;我该如何清除它&#xff1f;我担心如果我卖掉它&#xff0c;有人可能会从我的 iPhone 中恢复我的信息。” 升级到新 iPhone 后&#xff0c;你如何处理旧 iPhone&#xff1f;你打算出售、以旧换新还是捐赠&#xff1f;无论你选择哪一款&am…

[yolov11改进系列]基于yolov11使用SwinTransformer替换backbone用于提高多尺度特征提取能力的python源码+训练源码

【SwinTransformer介绍】 摘要 ViT的缺点&#xff1a; Transformer在语言处理中的基本元素是word token&#xff0c;其特点是语义信息比较密集。而ViT中token的尺度&#xff08;scale&#xff09;是固定的&#xff0c;且视觉token携带的语义信息比语言文字序列差&#xff0c…

NoSQL 之 Redis 配置与优化

目录 一、Redis 介绍 1、关系型数据库与非关系型数据库 &#xff08;1&#xff09;关系型数据库 &#xff08;2&#xff09;非关系型数据库 &#xff08;3&#xff09;非关系型数据库产生背景 2、Redis 基础 &#xff08;1&#xff09;Redis 简介 &#xff08;2&#x…

算法复杂度,咕咕咕

1.数据结构与算法 数据结构是计算机存储&#xff0c;组织数据的方式&#xff0c;指相互之间存在一种或多种特定关系的数据元素的集合。可以理解为形状不同的容器。 算法是定义好的计算过程&#xff0c;取输入值&#xff0c;经过一系列计算方法变成输出值。 &#xff08;推荐…

【Linux】 Linux 进程控制

参考博客&#xff1a;https://blog.csdn.net/sjsjnsjnn/article/details/125581083 一、进程创建 1.1 fork()函数 在linux中fork函数是非常重要的函数&#xff0c;它从已存在进程中创建一个新进程。新进程为子进程&#xff0c;而原进程为父进程。进程调用fork&#xff0c;当…

【大模型】MCP是啥?它和点菜、做菜、端菜有啥关系?

什么是 Model Context Protocol (MCP)? Model Context Protocol(模型上下文协议),通俗来说,就是一套用来管理、传递和维护对话或交互中上下文信息的规则和格式标准。 换句话说,MCP定义了模型在处理用户输入和生成回答时,如何理解、保留和传递上下文信息的协议,确保对…

机器学习的数学基础:决策树

决策树 文章目录 决策树决策树的基本思想划分选择信息增益增益率基尼指数 减枝处理回归问题对连续值的处理对缺失值的处理 决策树的基本思想 决策树是基于树结构来进行决策的&#xff0c;通过对问题的判断与决策&#xff0c;得到最终决策。 一般的&#xff0c;决策树包括一个…

基于若依前后分离版-用户密码错误锁定

sys_config配置参数 user.password.maxRetryCount&#xff1a;最大错误次数 user.password.lockTime&#xff1a;锁定时长 //SysLoginController//登录 PostMapping("/login") public AjaxResult login(RequestBody LoginBody loginBody) {AjaxResult ajax AjaxR…

Java线程安全集合类

Java线程安全集合类全面解析 目录 并发集合概述List线程安全实现Set线程安全实现Map线程安全实现Queue线程安全实现总结 并发集合概述 Java提供了多种线程安全的集合类&#xff0c;主要分为两大类&#xff1a; 传统同步集合&#xff1a;通过synchronized关键字实现线程安全…

汇川变频器MD600S-4T-5R5为什么要搭配GRJ9000S-10-T滤波器?

一、变频器的工作原理与电磁干扰 汇川MD600S-4T-5R5变频器是一款紧凑型高性能变频器&#xff0c;适用于三相380V-480V电网&#xff0c;额定电流5.5A&#xff0c;支持矢量控制和多种编码器接口&#xff0c;适用于需要高精度速度和转矩控制的场景&#xff0c;如机器人、电梯、纺…

数学运算在 OpenCV 中的核心作用与视觉效果演示

在计算机视觉中&#xff0c;图像不仅仅是我们肉眼所见的内容&#xff0c;它其实是由数值矩阵组成的“数据”。而在 OpenCV&#xff08;Open Source Computer Vision Library&#xff09;中&#xff0c;正是数学运算赋予了图像处理无限的可能——从基本的滤波、增强到复杂的特征…

【快速预览经典深度学习模型:CNN、RNN、LSTM、Transformer、ViT全解析!】

&#x1f680;快速预览经典深度学习模型&#xff1a;CNN、RNN、LSTM、Transformer、ViT全解析&#xff01; &#x1f4cc;你是否还在被深度学习模型名词搞混&#xff1f;本文带你用最短时间掌握五大经典模型的核心概念和应用场景&#xff0c;助你打通NLP与CV的任督二脉&#xf…

springboot mysql/mariadb迁移成oceanbase

前言&#xff1a;项目架构为 springbootmybatis-plusmysql 1.部署oceanbase服务 2.springboot项目引入oceanbase依赖&#xff08;即ob驱动&#xff09; ps&#xff1a;删除原有的mysql/mariadb依赖 <dependency> <groupId>com.oceanbase</groupId> …

电网“逆流”怎么办?如何实现分布式光伏发电全部自发自用?

2024年10月9日&#xff0c;国家能源局综合司发布了《分布式光伏发电开发建设管理办法&#xff08;征求意见稿&#xff09;》&#xff0c;意见稿规定了户用分布式光伏、一般工商业分布式光伏以及大型工商业分布式光伏的发电上网模式&#xff0c;当选择全部自发自用模式时&#x…

C语言之编译器集合

C语言有多种不同的编译器&#xff0c;以下是常见的编译工具及其特点&#xff1a; 一、主流C语言编译器 GCC&#xff08;GNU Compiler Collection&#xff09; 特点&#xff1a;开源、跨平台&#xff0c;支持多种语言&#xff08;C、C、Fortran 等&#xff09;。 使用场景&…

负载均衡将https请求转发后端http服务报错:The plain HTTP request was sent to HTTPS port

https请求报错&#xff1a;The plain HTTP request was sent to HTTPS port 示例背景描述&#xff1a; www.test.com:11001服务需要对互联网使用https提供服务后端java服务不支持https请求&#xff0c;且后端程序无法修改&#xff0c;仅支持http请求 问题描述&#xff1a; 因…

(3)Playwright自动化-3-离线搭建playwright环境

1.简介 如果是在公司局域网办公&#xff0c;或者公司为了安全对网络管控比较严格这种情况下如何搭建环境&#xff0c;我们简单来看看 &#xff08;第一种情况及解决办法&#xff1a;带要搭建环境的电脑到有网的地方在线安装即可。 &#xff08;第二种情况及解决办法&#xf…

【Fiddler抓取手机数据包】

Fiddler抓取手机数据包的配置方法 确保电脑和手机在同一局域网 电脑和手机需连接同一Wi-Fi网络。可通过电脑命令行输入ipconfig查看电脑的本地IP地址&#xff08;IPv4地址&#xff09;&#xff0c;手机需能ping通该IP。 配置Fiddler允许远程连接 打开Fiddler&#xff0c;进入…

PublishSubject、ReplaySubject、BehaviorSubject、AsyncSubject的区别

python容易编辑&#xff0c;因此用pyrx代替rxjava3做演示会比较快捷。 pyrx安装命令&#xff1a; pip install rx 一、Subject&#xff08;相当于 RxJava 的 PublishSubject&#xff09; PublishSubject PublishSubject 将对观察者发送订阅后产生的元素&#xff0c;而在订阅前…