Vue element ui + AmazonS3上传文件功能

一、在上传之前,需要先获取到AWS的S3服务的Access key ID和Secret access key

二、代码代码:

<template>
    <div class="upload">
        <!-- 我这里使用的是el-upload的http-request自定义上传事件,action用不上,但是不写值会报错,所以我也写上了,但是其实并没有用到~ -->
        <el-upload :show-file-list="false" drag :http-request="handleFileChange" class="upload-demo"
            action="your upload address" multiple>
            <el-button><i class="el-icon-upload"></i>Upload</el-button>
        </el-upload>
    </div>
</template>

<script>
// 需要安装aws-sdk 再引入哦~
import AWS from "aws-sdk";

export default {
    data() {
        return {
            s3: new AWS.S3({
                // AWS 认证相关
                apiVersion: "2006-03-01",
                accessKeyId: "填自己的",
                secretAccessKey: "填自己的",
                region: "填自己的",
            }),
            videoUpload: null,
            videoLoading: false, // 防止再次点击
            videoFileName: "", // 文件名称
            videoSuffix: "", // 文件后缀
        };
    },

    methods: {
        handleFileChange(e) {
            var that = this;
            let file = e.target.files[0];
            console.log("file change", file);

            if (file) {
                that.videoFileName = file.name;
                that.videoLoading = true;
                that.videoSuffix = that.videoFileName.split(".")[1];

                var key = new Date().getTime() + "_" + "." + that.videoSuffix;
                var params = {
                    Bucket: "填自己的", // 存储桶名称
                    Key: key, // 文件名,重名会覆盖
                    Body: file,
                };
                that.videoUpload = that.s3.upload(params, function (err, data) {
                    if (err) {
                        console.log("发生错误:", err.code, err.message);
                        that.videoLoading = false;
                    } else {
                        console.log("上传成功, 返回结果");
                        console.log(data);
                        console.log(data.Location); //上传文件在S3的位置
                    }
                });
            }
        },
    },
};
</script>

别忘记安装AWS.S3!!

npm i aws-sdk  // 安装aws-sdk

三、如果上传失败,报此错误:ETagMissing No access to ETag property on response. Check CORS configuration to expose ETag header.

解决方案:找到配置的存储桶——权限——跨源资源共享(CORS),配置如下

[
    {
        "AllowedHeaders": [
            "*"
        ],
        "AllowedMethods": [
            "PUT",
            "POST",
            "DELETE"
        ],
        "AllowedOrigins": [
            "*"
        ],
        "ExposeHeaders": [
            "ETag",
            "x-amz-server-side-encryption",
            "x-amz-request-id",
            "x-amz-id-2"
        ],
        "MaxAgeSeconds": 3000
    },
    {
        "AllowedHeaders": [
            "*"
        ],
        "AllowedMethods": [
            "PUT",
            "POST",
            "DELETE"
        ],
        "AllowedOrigins": [
            "*"
        ],
        "ExposeHeaders": [
            "ETag",
            "x-amz-server-side-encryption",
            "x-amz-request-id",
            "x-amz-id-2"
        ],
        "MaxAgeSeconds": 3000
    },
    {
        "AllowedHeaders": [],
        "AllowedMethods": [
            "GET"
        ],
        "AllowedOrigins": [
            "*"
        ],
        "ExposeHeaders": [
            "ETag",
            "x-amz-server-side-encryption",
            "x-amz-request-id",
            "x-amz-id-2"
        ],
        "MaxAgeSeconds": 3000
    }
]

参考文章:

https://www.jianshu.com/p/2bd8717d2d89

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要实现Spring Boot Vue Element UI Mybatis-Plus的文件分享,可以按照以下步骤进行: 1. 首先,需要搭建一个基于Spring Boot的后端应用程序。使用Mybatis-Plus来操作数据库,设计合适的实体类和数据库表,用于存储文件的相关信息,例如文件名、路径、大小等。 2. 在后端应用程序中创建一个文件上传的接口,用于接收前端传递的文件。可以使用Spring Boot内置的MultipartFile类来处理文件上传,将文件保存到指定的目录中,并将文件相关信息保存到数据库中。 3. 创建一个文件下载的接口,用于访问和下载已上传的文件。通过接口可以获取文件的相关信息,包括文件的路径和文件名。使用Java的File类或者相关的工具类来读取文件,并将文件以流的形式返回给前端。 4. 在前端应用程序中使用VueElement UI来实现文件分享页面。可以设计一个文件列表的组件,展示已上传的文件信息,例如文件名、大小、上传时间等。使用Element UI的Table组件可以方便地展示数据。 5. 在文件列表组件中,为每个文件增加下载功能的按钮或链接。按钮或链接的点击事件调用后端提供的文件下载接口,将文件下载到用户本地。 6. 可以考虑增加文件的搜索和排序功能,方便用户查找和管理文件。可以使用Element UI的Input组件和Table组件的排序功能来实现。 7. 为了提高用户体验,可以加入文件预览的功能。可以使用第三方插件,如Viewer.js,来实现文件的在线预览。 总结来说,实现Spring Boot Vue Element UI Mybatis-Plus的文件分享需要搭建一个后端应用程序来处理文件的上传和下载,使用数据库存储文件相关信息;在前端应用程序中使用VueElement UI来展示和管理文件,实现文件的搜索、排序和预览功能

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值