aws s3 存储桶 前端组件上传简单案例

写一个vue3 上传aws oss存储的案例

使用到的插件

npm install @aws-sdk/client-s3

注意事项 :

1. 本地调试 , 需要设置在官网设置跨域  必须!!! 否则调试不了 ,前端代理是不起作用的 ,因为是插件sdk的直接调用

2. 此方法只针对后端懒鬼 直接让前端使用ACCESS_KEY_ID 和AWS_SECRET_ACCESS_KEY 进行直传  正经开发不推荐 

友好的谷歌插件 :Fileon - S3 Browser   可以直观查看存储桶

封装组件代码示例  UploadImage.vue

<template><div><inputref="fileInput"class="absolute top-[-10000px] left-[-10000px]"type="file"id="file"name="file"accept="image/png, image/jpeg, image/gif, image/jpg"@change="handleFileChange"/><!-- <button @click="$refs.fileInput.click()">选择文件</button> --><!-- <button @click="uploadFile">上传文件</button> --></div>
</template><script setup>
import { S3Client, PutObjectCommand } from "@aws-sdk/client-s3";
import { ref, defineEmits } from "vue";const s3Client = new S3Client({region: "ap-southeast-1",credentials: {accessKeyId: import.meta.env.VITE_APP_AWS_ACCESS_KEY_ID,secretAccessKey: import.meta.env.VITE_APP_AWS_SECRET_ACCESS_KEY,},
});const chooseFile = () => {fileInput.value.click();
};const fileInput = ref(null);
const selectedFile = ref(null);const handleFileChange = (event) => {selectedFile.value = event.target.files[0];//将input读取到的File格式的图片文件 转为base64提供访问convertFileToUrl(event.target.files[0]);
};
const convertFileToUrl = (file) => {const reader = new FileReader();reader.onload = (e) => {let imageUrl = e.target.result;// console.log("imageUrl", imageUrl);// 文件读取完成后,将结果发送给父组件emit("file-chosen", e.target.result);};reader.readAsDataURL(file);
};const uploadFile = async () => {console.log("开始上传文件", selectedFile.value, selectedFile.value.name);if (!selectedFile.value) return console.log("未选择文件");try {const bucketName = "hy-bucket11";const key = `uploads/${selectedFile.value.name}`;const params = {Bucket: bucketName,Key: key,Body: selectedFile.value,};const command = new PutObjectCommand(params);await s3Client.send(command);console.log("文件上传成功");// 访问地址// [$Schema]://[$Bucket].[$Endpoint]/[$Object]console.log("https://hy-bucket11.ap-southeast-1.amazonaws.com/uploads/" +selectedFile.value.name);} catch (error) {console.error("文件上传失败", error);}
};// 暴露方法给父组件
defineExpose({ chooseFile, uploadFile });
// 调用父组件方法
const emit = defineEmits(["file-chosen"]);
</script><!-- 父组件调用示例 导入组件 -->
<!-- <UploadImage ref="uploadImageRef" @file-chosen="handleFileChosen" /> --><!-- 父组件调用示例 选择图片 -->
<!-- const selectImag = () => {uploadImageRef.value?.chooseFile();
}; --><!--父组件调用示例 图片回传 -->
<!-- const handleFileChosen = (base64Url: any) => (checkImage.value = base64Url); --><!--父组件调用示例 上传文件 --><!-- uploadImageRef.value?.uploadFile(); -->

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

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

相关文章

【AIGC】ChatGPT RAG提取文档内容,高效制作PPT、论文

目录 一、理解 RAG 技术 二、利用 ChatGPT 的 RAG 技术提取文档内容 三、高效制作 PPT 四、高效撰写论文 五、最佳实践与建议 六、工具推荐 随着人工智能生成内容&#xff08;AIGC&#xff09;的快速发展&#xff0c;利用先进的技术工具如 ChatGPT 的 RAG&#xff08;Ret…

spring boot项目对接人大金仓

先确认一下依赖 第一 是否引入了mybatis-plus多数据源&#xff0c;如果引入了请将版本保持在3.5.0以上 <dependency><groupId>com.baomidou</groupId><artifactId>dynamic-datasource-spring-boot-starter</artifactId><version>${dynam…

Java 中创建线程几种方式

目录 概述 一. 继承Thread类 1. 特点 2. 注意事项 3. 代码示例 二. 实现Runnable接口 1. 特点 2. 注意事项 3. 代码示例 三. 实现Callable接口 1. 特点 2. 注意事项 3. 代码示例 概述 在Java中&#xff0c;线程&#xff08;Thread&#xff09;是程序执行的最小单…

已解决sublime text 3 注册激活

问题&#xff1a;未激活 解决方法&#xff1a; 安装sublime3后&#xff0c;将Patch.exe文件放入sublime 安装文件下 运行Patch.exe&#xff0c;复制粘贴注册码到 preference->enter license&#xff1b;操作如下 点击“Use license”,提示如下图表示激活成功&#xff1a; 重…

Mac使用gradle编译springboot-2.7.x源码

1 开发环境&#xff1a; JDK8 ideaIU-2024.2.2 gradle-7.6.3 代理网络 2 下载springboot源码 代码仓库网址 git clone -b 2.7.x https://github.com/spring-projects/spring-boot.git3 安装gradle gradle下载网址 https://services.gradle.org/distributions/ 安装此文件指…

你的提交信息还在拖后腿?看这里,提升代码质量的绝招!

文章目录 前言一、什么是约定式提交&#xff1f;二、创建新仓库三、将代码推送到远程仓库的步骤1.检查当前远程仓库2.添加代码到暂存区3. 进行约定式提交4. 推送代码到远程仓库5. 完成推送 总结 前言 在当今软件开发领域&#xff0c;Git已经成为最广泛使用的版本控制系统之一。…

按之字形顺序打印二叉树

题目链接&#xff1a;[编程题]按之字形顺序打印二叉树 题目简单描述&#xff1a; 给定一个二叉树&#xff0c;返回该二叉树的之字形层序遍历&#xff0c;&#xff08;第一层从左向右&#xff0c;下一层从右向左&#xff0c;一直这样交替&#xff09; 思路&#xff1a; 层序…

shell文件操作

1. 使用Makefile将前面所写的项目&#xff0c;升级优化 答&#xff1a;系统刚重装 文件缺失 恕难从命

一次RPC调用过程是怎么样的?

注册中心 RPC&#xff08;Remote Procedure Call&#xff09;翻译成中文就是 {远程过程调用}。RPC 框架起到的作用就是为了实现&#xff0c;调用远程方法时&#xff0c;能够做到和调用本地方法一样&#xff0c;让开发人员更专注于业务开发&#xff0c;不用去考虑网络编程等细节…

neo4j小白入门

1.建立几个学校的节点 1.1创建一个节点的Cypher命令 create (Variable:Lable {Key1:Value,Key2,Value2}) return Variable 1.2创建一个学校的节点 create (n:School{name:清华大学,code: 10003,establishmentDate:date ("1911-04-29")})return n 1.3一次创建几个…

出现conda不是内部或外部命令,也不是可运行的程序或批处理文件。的解决办法

发现是我的环境变量不对&#xff0c;需要改成conda.exe所在的目录下 如果不知道自己conda.exe在哪的 可以下载个everything这个软件 找东西很快 找到后 点击环境变量-系统变量-Path-新建-&#xff08;你的conda.exe所在目录&#xff1a;绝对路径&#xff09; 完成上述操作…

如何通过蜂巢(容器安全)管理内部部署数据安全产品与云数据安全产品?

本文将探讨内部部署和云数据安全产品之间的主要区别。在思考这个问题之前&#xff0c;首先了解内部部署和云数据安全产品之间的主要区别。 内部部署数据安全产品意味着管理控制台位于企业客户的内部部署&#xff0c;而德迅云安全则在云中托管云数据安全产品。德迅云安全供应商通…

DERT目标检测—End-to-End Object Detection with Transformers

DERT&#xff1a;使用Transformer的端到端目标检测 论文题目&#xff1a;End-to-End Object Detection with Transformers 官方代码&#xff1a;https://github.com/facebookresearch/detr 论文题目中包括的一个创新点End to End(端到端的方法&#xff09;简单的理解就是没有使…

MISC - 第四天(OOK编码,audacity音频工具,摩斯电码,D盾,盲文识别,vmdk文件压缩)

前言 各位师傅大家好&#xff0c;我是qmx_07&#xff0c;今天继续讲解MISC知识点 FLAG 附件是一张图片&#xff0c;尝试binwalk无果 使用StegSolve工具Data Extract查看时 发现PK字段&#xff0c;是大多数压缩包的文件头点击Save Bin保存zip文件 解压缩失败使用修复软件:htt…

代码随想录Day17 图论-2

103. 水流问题 本题思路很简单 要求我们找到可以满足到达两个边界的单元格的坐标 有一个优化的思路就是 我们从边界的节点向中间遍历 然后用两个数组表示 一个是第一组边界的数组 一个是第二边界的数组 如果两个数组都遍历到了某一个单元格 就说明该单元格时满足题目要求的 #…

OpenLayers 开源的Web GIS引擎 - 添加地图控件地图控件

中心点按钮、地图放大缩小滑块、全图和比例尺控件 直接上代码&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.…

如何选择适合的干式电抗器?

干式电抗器是电力系统中重要的电气设备&#xff0c;主要用于限制电网中的短路电流&#xff0c;提高电力系统的稳定性和可靠性。选择适合的干式电抗器对于保障电力系统的正常运行具有重要意义。以下是选择适合的干式电抗器的一些建议&#xff1a; 1. 根据电力系统的需求选择合适…

大模型算法岗常见面试题100道(值得收藏)非常详细收藏我这一篇就够了

大模型应该是目前当之无愧的最有影响力的AI技术&#xff0c;它正在革新各个行业&#xff0c;包括自然语言处理、机器翻译、内容创作和客户服务等等&#xff0c;正在成为未来商业环境的重要组成部分。 截至目前大模型已经超过200个&#xff0c;在大模型纵横的时代&#xff0c;不…

【设计模式】创建型模式(四):建造者模式

《设计模式之创建型模式》系列&#xff0c;共包含以下文章&#xff1a; 创建型模式&#xff08;一&#xff09;&#xff1a;工厂模式创建型模式&#xff08;二&#xff09;&#xff1a;抽象工厂模式创建型模式&#xff08;三&#xff09;&#xff1a;单例模式创建型模式&#…

Android14请求动态申请存储权限

Android14请求动态申请存储权限 Android14和Android15存储权限有增加多了选择部分&#xff0c;还是全部。一个小小的存储权限真的被它玩出了花来。本来Android13就将存储权限进行了3个细分&#xff0c;是图片&#xff0c;音频还是视频文件。 步骤一&#xff1a;AndroidManife…