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

news2024/11/19 2:32:33

写一个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>
    <input
      ref="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.coloradmin.cn/o/2162097.html

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

相关文章

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

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

TAPD_保密需求介绍

功能指引 本文档将介绍&#xff1a;保密需求的基本介绍、如何配置保密需求和保密需求相关的常见问题。 一、基本介绍 伴随业务的拓展&#xff0c;团队成员们在工作中不免要遇到跨团队协作和外包人员管理等需要 权限控制和信息保密 的场景。 此情况下&#xff0c;项目数据的权…

Python接口自动化测试输出日志到控制台和文件

一、日志的作用 一般程序日志出自下面几个方面的需求&#xff1a; 1. 记录用户操作的审计日志&#xff0c;甚至有的时候就是监管部门的要求。 2. 快速定位问题的根源 3. 追踪程序执行的过程。 4. 追踪数据的变化 5. 数据统计和性能分析 6. 采集运行环境数据 一般在程序上线之后…

图文组合商标部分驳回后优化后初审通过!

这几天以前有个企业的商标初审下来了&#xff0c;以前是加了图形个别部分没有通过初审&#xff0c;后面是把图形去掉重新用文字申请下来初审。 图形与文字同时申请&#xff0c;会分别审查有一个元素过不了&#xff0c;整体就会过不了&#xff0c;所以平常就会建议分开申请注册商…

Transformers | 在自己的电脑上开启预训练大模型使用之旅!

本文内容主要包括两部分&#xff1a; Hugging Face 社区介绍 如何使用 Transformers 库的模型 1. Hugging Face 社区介绍 Hugging Face (https://huggingface.co/) 是一个 Hub 社区&#xff0c;它和 GitHub 相同的是&#xff0c;他们都是基于 Git 进行版本控制的存储库社区&…

探寻大模型时代智慧农业新未来,商汤与上海市农委达成战略合作

近日&#xff0c;在中国农民丰收节上海会场丰收庆典活动上&#xff0c;商汤科技与上海市农业农村委员会&#xff08;下称&#xff1a;上海市农委&#xff09;签署战略合作协议&#xff0c;双方将依托先进的AI大模型技术&#xff0c;共同推进上海智慧农业发展&#xff0c;打造国…

ESXI主机加入VCENTER现有集群提示出现常规性错误

背景&#xff1a;由于忘记了这台主机的root密码&#xff0c;所以在迁移完虚拟机后给这台主机重新安装了操作系统&#xff0c;装完操作系统加集群提示如下报错&#xff1a; 查阅了一些资料后发现主机的CPU是一样的&#xff0c;不需要开EVC&#xff1b; 也有一些说需要改这个配置…

《关键跃升读书笔记》11

协作&#xff1a; 怎么解决“容忍⿊”这类问题&#xff1f;我们要重新理解“⽂化”。⼈类⽂化、企 业⽂化&#xff0c;都是为了让⼈们更好地协作。 再⼩的公司&#xff0c;再⼩的团队&#xff0c;都是⼀个共同协作体&#xff0c;就像整个⼈类社会 是共同协作体。理解了⼈类社会…

“被卷”还是“破卷”,咱有得选

职场内卷是一个当下社会备受热议的话题。身处内卷中的人&#xff0c;所感受到的是价值感不足、低效、无奈等消极内容&#xff0c;但哪怕知道处于那样的工作环境是不健康的&#xff0c;因为环境所迫&#xff0c;似乎也只能被裹挟。 就如当下热播的都市剧《凡人歌》中的那隽&…

Kubernetes 深入浅出系列 | 容器剖析之容器基本实现原理

一、容器基本实现原理 Docker 主要通过如下三个方面来实现容器化&#xff1a; ① 使用操作系统的 namespace 隔离系统资源技术&#xff0c;通过隔离 网络、PID 进程、系统信号量、文件系统挂载、主机名和域名&#xff0c;来实现在同一宿主机系统中&#xff0c;运行不同的容器&…

6种常见位运算符+异或运算符的使用(加密、解密)

一、位运算符 位运算符进行的是整数与整数之间的运算 1、右移运算符&#xff1a;>> &#xff08;1&#xff09;相当于对整数除以2 &#xff08;2&#xff09;举例&#xff1a; int num 2; System.out.println(num >> 1); 2、左移运算符&#xff1a;<< …

数据结构---顺序表之单链表

1.链表的概念 链表是一种逻辑上是线性的&#xff0c;但物理结构不一定是线性的数据结构&#xff0c;它通过链表中的指针链接次序实现的 链表的存储空间是我们通过动态内存开辟的内存空间&#xff0c;所以他们的地址可能是连续的也可能不是连续的 2.链表的分类 1.单向或者双向…

PostgreSQL JAVA与SQL集成之PL/Java

PostgreSQL pljava PL/Java 作为 PostgreSQL 的编程语言扩展之一&#xff0c;与 PL/pgSQL&#xff08;PostgreSQL 原生的存储过程语言&#xff09;相比&#xff0c;提供了 Java 语言特有的面向对象功能&#xff0c;并支持 Java 的标准库和第三方库。由于 Java 是一种跨平台的语…

Python 聊聊有内置函数,又该怎么学习内置函数

前言 python有内置函数的概念&#xff0c;从Python3.x开始&#xff0c;内置函数位于builtins模块&#xff0c;比如我们常用的内置函数len()&#xff0c;其实它是builtins模块下的属性&#xff0c;我们也可以builtins.len&#xff08;&#xff09;去访问&#xff0c;当然因为每个…

海豚调度运行成功但无法生成实例解决

海豚调度运行成功但无法生成实例解决 问题描述 点击运行&#xff0c;提示运行成功但无法在工作实例中看到 问题定位 查看资源监控&#xff0c;内存占用80% 查看master日志 tail -f /home/dolphinscheduler/tmp/dolphinscheduler/master-server/logs/dolphinscheduler-m…

无刷直流电机内阻小和大有什么区别

‌直流电机的内阻小和大各有其特点和应用场景。 ‌ 内阻小的直流电机通常具有较小的线圈匝数&#xff0c;这意味着在工作时消耗的电流较大&#xff0c;从而在同一转速下能够提供较大的扭矩。这种电机适用于需要较大扭矩的应用场景&#xff0c;例如重载启动或需要较高机械效率的…

模型django封装uvicorn服务器部署实战

Uvicorn 是一个轻量级的 ASGI 服务器&#xff0c;它基于 uvloop 和 httptools 这两个高性能的异步库。Uvicorn 提供了快速的启动时间和低延迟的响应&#xff0c;非常适合用于生产环境。 Django&#xff1a; 是一个开源且强大的Web框架&#xff0c;适用于快速开发和部署Python …

Spring中存储Bean的常见注解

目录 IoC & DI IOC&#xff08;控制反转&#xff09;详解 依赖注入的三种方式 IoC & DI IoC: Inversion of Control (控制反转), 也就是说 Spring 是⼀个"控制反转"的容器. 控制反转&#xff1a;也就是控制权反转. 什么的控制权发⽣了反转? 获得依赖对…

成为谷歌开发者专家(GDE)的经历

大家好&#xff0c;我是张海龙(Jason)。经过一年多的准备&#xff0c;GDE申请 终于正式成功通过面试&#xff0c;成为了国内第一位Firebase GDE。下面对整个过程做个总结&#xff0c;希望对大家有所帮助。 1.什么是 GDE&#xff1f; Google Developers上面有详细的说明&#x…

关于预处理的一系列问题

1. 预定义符号 C语⾔设置了⼀些预定义符号&#xff0c;可以直接使⽤&#xff0c;预定义符号也是在预处理期间处理的。 2. #define定义常量 #define name stuff 如果定义的 stuff过⻓&#xff0c;可以分成⼏⾏写&#xff0c;除了最后⼀⾏外&#xff0c;每⾏的后⾯都加⼀个反…