Vue2实现上传图片到阿里云的OSS对象存储

news/2025/1/18 11:18:31/

在 Vue 2 项目中,将图片上传到阿里云的 OSS(对象存储)需要几个步骤,包括配置阿里云 OSS、获取上传凭证、在前端进行上传操作等。以下是一个详细的实现步骤:

1. 配置阿里云 OSS

首先,你需要在阿里云 OSS 上创建一个存储桶(Bucket),并配置好相关的权限。

2. 后端获取上传凭证

由于直接暴露 OSS 的 Access Key ID 和 Access Key Secret 到前端是不安全的,所以需要通过后端服务器来获取一个临时的上传凭证(STS Token)。

以下是一个使用 Node.js 和阿里云 SDK 获取上传凭证的示例:

javascript">const OSS = require('ali-oss');
const STS = require('ali-oss').STS;const client = new OSS({region: '<your-oss-region>',accessKeyId: '<your-access-key-id>',accessKeySecret: '<your-access-key-secret>',sts: new STS({accessKeyId: '<your-access-key-id>',accessKeySecret: '<your-access-key-secret>',})
});async function getUploadCredentials(bucketName, objectName) {try {const result = await client.stsAssumeRole('<your-sts-role-arn>', '<your-sts-session-name>', 3600);const stsCredentials = {AccessKeyId: result.credentials.AccessKeyId,AccessKeySecret: result.credentials.AccessKeySecret,SecurityToken: result.credentials.SecurityToken,Expiration: result.credentials.Expiration,};const policy = {expiration: new Date(Date.now() + 3600 * 1000).toISOString(), // 1 hourconditions: [['content-length-range', 0, 10485760], // Limit upload size to 10MB['starts-with', '$key', objectName],],};const postObject = await client.postObject(bucketName, objectName, policy);return {...stsCredentials,...postObject,};} catch (error) {console.error('Error getting upload credentials:', error);throw error;}
}// Example usage:
getUploadCredentials('<your-bucket-name>', '${filename}').then(credentials => {console.log(credentials);
}).catch(error => {console.error('Error:', error);
});


3. 前端 Vue 2 实现上传

在 Vue 2 项目中,你可以使用 Axios 或 Fetch 来请求后端接口获取上传凭证,然后使用这些凭证进行文件上传。

以下是一个 Vue 组件的示例:

javascript"><template><div><input type="file" @change="handleFileChange" /><button @click="uploadFile">Upload</button></div>
</template><script>
import axios from 'axios';export default {data() {return {file: null,uploadCredentials: null,};},methods: {async handleFileChange(event) {this.file = event.target.files[0];},async fetchUploadCredentials() {try {const response = await axios.get('/api/get-oss-credentials'); // 替换为你的后端接口this.uploadCredentials = response.data;} catch (error) {console.error('Error fetching upload credentials:', error);}},async uploadFile() {if (!this.file || !this.uploadCredentials) {alert('Please select a file and fetch credentials first.');return;}const formData = new FormData();formData.append('key', this.uploadCredentials.key);formData.append('OSSAccessKeyId', this.uploadCredentials.AccessKeyId);formData.append('policy', this.uploadCredentials.policy);formData.append('Signature', this.uploadCredentials.signature);formData.append('success_action_status', '200');formData.append('file', this.file);try {const response = await axios.post(this.uploadCredentials.uploadUrl, formData, {headers: {'Content-Type': 'multipart/form-data',},});console.log('Upload successful:', response.data);} catch (error) {console.error('Error uploading file:', error);}},},async mounted() {// Fetch upload credentials when the component is mountedawait this.fetchUploadCredentials();},
};
</script>

4. 注意事项
  1. 安全性:确保你的后端接口 /api/get-oss-credentials 是安全的,并且只有经过身份验证的用户才能访问。
  2. CORS 配置:在阿里云 OSS 的 Bucket 配置中,配置 CORS(跨域资源共享),允许你的前端域名进行访问。
  3. 错误处理:在实际项目中,应添加更多的错误处理和用户提示。

通过以上步骤,你就可以在 Vue 2 项目中实现从前端上传图片到阿里云 OSS 对象存储。


http://www.ppmy.cn/news/1564130.html

相关文章

VS Code--常用的插件

原文网址&#xff1a;VS Code--常用的插件_IT利刃出鞘的博客-CSDN博客 简介 本文介绍VS Code&#xff08;Visual Studio Code&#xff09;常用的插件。 插件的配置 默认情况下&#xff0c;插件会放到这里&#xff1a;C:\Users\xxx\.vscode\extensions 修改插件位置的方法 …

算法随笔_10: 供暖器

上一篇&#xff1a;算法随笔_9:压缩字符串-CSDN博客 题目描述如下&#xff1a; 冬季已经来临。 你的任务是设计一个有固定加热半径的供暖器向所有房屋供暖。 在加热器的加热半径范围内的每个房屋都可以获得供暖。 现在&#xff0c;给出位于一条水平线上的房屋 houses 和供暖…

2025年01月14日Github流行趋势

1. 项目名称&#xff1a;MoneyPrinterV2 项目地址url&#xff1a;https://github.com/FujiwaraChoki/MoneyPrinterV2项目语言&#xff1a;Python历史star数&#xff1a;4534今日star数&#xff1a;173项目维护者&#xff1a;FujiwaraChoki, supperfreddo, TomyDiNero, SUTFutu…

加菲工具格式化XML:让数据呈现更清晰

加菲工具格式化XML&#xff1a;让数据呈现更清晰 在处理XML文件时&#xff0c;我们常常会遇到格式混乱、难以阅读的情况&#xff0c;这给数据的分析和处理带来了诸多不便。而加菲工具的XML格式化功能&#xff0c;就像是一位专业的数据整理师&#xff0c;能够迅速将杂乱无章的X…

G1原理—7.G1的GC日志分析解读

大纲 1.TLAB的GC日志解读 2.YGC的GC日志解读 3.模拟YGC(单次GC及多次GC的不同场景) 4.打开实验选项查看YGC的详情日志信息 5.Mixed GC日志信息之初始标记过程 6.Mixed GC日志信息之混合回收过程 7.Mixed GC日志信息之Region的详细信息和标记过程的详细信息 8.FGC的日志…

Android 实现多语言功能

这几天看到了小红书上有大量TikTok用户涌入&#xff0c;app端上外国用户描述的英文信息&#xff0c;因此想着研究一下Android端如何实现多语言功能&#xff0c;以下用一个最简单的demo演示一下&#xff1a; 1. 创建不同语言的资源文件 英语资源文件 (res/values/strings.xml):…

43.Textbox的数据绑定 C#例子 WPF例子

固定最简步骤&#xff0c;包括 XAML&#xff1a; 题头里引入命名空间 标题下面引入类 box和block绑定属性 C#&#xff1a; 通知的类&#xff0c;及对应固定的任务 引入字段 引入属性 属性双触发&#xff0c;其中一个更新block的属性 block>指向box的属性 从Textbo…

NVIDIA 下 基于Ubuntun20.04下 使用脚本安装 ros2-foxy 和 使用docker安装 ros2-foxy

一、前提介绍&#xff1a; 本文主要采用两种方式在NVIDIA 下基于 Ubuntun20.04安装 ros2-foxy。 使用环境&#xff1a; NVIDIA 为 Jetson 系列下 Jetson Xavier NX&#xff1b; Ubuntun版本&#xff1a;20.04 二、安装方法&#xff1a; 1、使用脚本编译方式&#xff1a; 使…