element上传图片的方法

上传图片的方法
1直接后端返回上传图片的服务器地址,使用element的action属性可以直接上传到服务器,之后后端负责上传阿里云
2客户端直传两种方式
客户端签名直传
首先调取接口获取oss配置 包括 accesskeyid accesskeysecret bucket服务器名称 host 服务器地址 之后使用 new oss 并使用multipartUpload 上传你的图片到阿里云 但是这种方法会暴露你的oss服务器的secret 一般不使用

服务端签名直传
这种方法是客户端向服务端发送上传i请求,服务端生成一个policy 你在前端配置policy来进行上传图片
通过axios直接上传到阿里云 (上传表单)

介绍这种方法
首先上传前获取阿里云配置

            getOssData() {
                this.$fetch.api_home.getOssData()
                    .then(data=>{
                        this.accessKeyId= data.accessid; //ak
                        this.policy = data.policy;  //secret
                        this.region = data.host;  //  上传地址
                        this.dir = data.dir;  //上传路径
                        this.callback = data.callback;  //回调函数
                        this.signature = data.signature;  //
                    })
                    .catch(err=>{
                        this.$message.error(err)
                    })
            },

upload组件绑定的事件

						<el-upload
                                class="avatar-uploader"
                                action
                                :http-request="uploadAddImg"
                                :show-file-list="false"
                                :on-success="handleAvatarSuccess"
                                :before-upload="beforeAvatarUpload">
                            <img v-if="form.pictureurl" :src="form.pictureurl" class="avatarUpload" style="width: 150px;height: 150px;" @click="getOssData()">
                            <i v-else class="el-icon-plus avatar-uploader-icon" @click="getOssData()"></i>
                        </el-upload>

注意绑定的事件http-request 用于自定义上传
官方给的介绍
在这里插入图片描述

            async uploadAddImg(option) {
                // try/catch异常捕获  当try中的报错误的时候,执行catch里面的代码,try下面的代码不再执行
                // 通过throw自动抛出的错误不会被catch捕获
                try {
                    //对获取到的oss配置文件进行数据处理
                    let file = option.file;
                    let fileName = file.name;
                    var name = fileName.split(".")[1];
                    // 获取OSS配置信息
                    var formData = new FormData();
                    var timestamp = (new Date()).valueOf();
                    var result = `${timestamp}.${name}`;
                    formData.append('key', `${this.dir}${result}`);   // 文件名字,可设置路径
                    formData.append('OSSAccessKeyId', this.accessKeyId);  // Bucket 拥有者的Access Key Id
                    formData.append('policy', this.policy);  // policy规定了请求的表单域的合法性
                    // 根据Access Key Secret和policy计算的签名信息,OSS验证该签名信息从而验证该Post请求的合法性
                    formData.append('signature', this.signature);   //签名
                    formData.append('success_action_status', 201);   // 成功时让服务端返回200,不然,默认会返回204
                    formData.append('file', file);   // 需要上传的文件filer
                    formData.append('callback', this.callback);
                    axios.post(this.region, formData, {
                        headers: { 'Content-Type': 'multipart/form-data' }
                    })
                        .then((res) => {
                            if (res.status === 201){
                                let url = this.region + "/" + this.dir + result;
                      
                                // let arr = url.split("/");
                                //获取到在线地址后,将图片名称赋给form。地址一份给form一份给imageUrl1.
                                this.form.pictureurl = url;
                            }
                        })
                        .catch((err) => {
                            this.$message.error("请求错误")
                        });
                } catch (error) {
                    this.$message.error("try报错");
                    option.onError("上传失败");
                }
            },

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Element上传组件是一个常用的文件上传组件,可以通过设置不同的属性来实现自定义的上传功能。其中一些常用的属性包括: 1. limit:限制上传文件的个数,可以设置为1表示只能上传单个文件,多个文件则不设置该属性。 2. auto-upload:是否自动上传文件。如果设置为true,则选择文件后会自动将文件上传到后台服务器;如果设置为false,则需要自己通过其他方法获取组件中的文件和其他表单数据,再进行上传。 3. action:上传文件的地址。如果设置了auto-upload属性,组件会自动按照该地址提交文件。可以自定义该属性,以增强拓展性。 4. multiple:是否支持多文件上传。如果需要上传多个文件,则设置该属性为true;如果只上传单个文件,则不设置该属性。 5. accept:限制文件类型。可以设置允许上传的文件类型,用户只能选择指定类型的文件进行上传。 通过设置这些属性,可以实现自定义的上传文件功能。在Element上传组件的代码中,可以看到这些属性的使用。例如,通过设置auto-upload为false,可以取消自动上传,然后通过自定义的uploadFile方法来实现文件的上传。同时,还可以通过handleChange、handlePreview和handleRemove等方法来处理文件选择、预览和移除的操作。\[2\]\[3\] 总之,Element上传组件提供了丰富的属性和方法,可以根据需求进行灵活的配置和定制,实现自定义的上传文件功能。 #### 引用[.reference_title] - *1* [超级简单教你Element UI上传功能(以及上传坑点)](https://blog.csdn.net/LangZi_Azhao/article/details/123139373)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [elementUI自定义上传文件(前端后端超详细过程)](https://blog.csdn.net/ILIKETANGBOHU/article/details/127333590)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值