uniapp 文件上传参考

1.需要先去引入插件市场的插件
https://ext.dcloud.net.cn/plugin?id=6701
2.代码
这里的按钮我是引入了uview的,直接复制的话会报错,根据项目需求自行更改

<template>
    <view>
        <view class="content">
            <u-button class="audit" @click="handlerClick" type="primary">
                上传</u-button>
            <view v-for="(item,index) in lists" class="text">
                {{item.fileName}}
                <u-icon @click="deleteItem(index)" name="close" style="margin-left: 20upx;" color="red" size="28">
                </u-icon>
            </view>
        </view>
    </view>
</template>

<script>
    import appChooseFile from '@/js_sdk/appChooseFile/index.js'
    import {
        IMG_URL,
        API_URL
    } from '@/env'
    export default {
        name: "upload-file",
        props: {
            action: {
                type: String,
                default: '/file/web/add'
            },
            header: {
                type: Object,
                default () {
                    return {
                        Authorization: `Bearer ${uni.getStorageSync('tokenInfo') ? uni.getStorageSync('tokenInfo') : ''}`
                    };
                }
            },
            maxCount: {
                type: [String, Number],
                default: 52
            },
            showTips: {
                type: Boolean,
                default: true
            },
            fileList: {
                type: Array,
                default () {
                    return [];
                }
            },
            toJson: {
                type: Boolean,
                default: true
            },
        },
        data() {
            return {
                lists: []
            };
        },
        watch: {
            formData: function(val) {
                this.formData = val;
            },
            fileList: {
                immediate: true,
                handler(val) {
                    val.map(value => {
                        // 首先检查内部是否已经添加过这张图片,因为外部绑定了一个对象给fileList的话(对象引用),进行修改外部fileList
                        // 时,会触发watch,导致重新把原来的图片再次添加到this.lists
                        // 数组的some方法意思是,只要数组元素有任意一个元素条件符合,就返回true,而另一个数组的every方法的意思是数组所有元素都符合条件才返回true
                        // {
                        //  "fileName": "1636506480(1)-已转档.pdf",
                        //  "fileUrl": "/dev-alone/uploadFiles/files/2021-12-15/1639548404742_822479.pdf"
                        // }
                        let tmp = this.lists.some(val => {
                                return val.fileUrl == value.fileUrl;
                            })
                            // 如果内部没有这个图片(tmp为false),则添加到内部
                            !tmp && this.lists.push(value);
                    });
                }
            },
            // 监听lists的变化,发出事件
            lists(n) {
                this.$emit('on-list-change', n);
            }
        },
        methods: {
            deleteItem(index) {
                uni.showModal({
                    title: '提示',
                    content: '您确定要删除此项吗?',
                    success: async (res) => {
                        if (res.confirm) {
                            this.handlerDeleteItem(index);
                        }
                    }
                });
            },
            // 执行移除图片的动作,上方代码只是判断是否可以移除
            handlerDeleteItem(index) {
                this.lists.splice(index, 1);
                this.$forceUpdate();
                this.$emit('on-remove', index, this.lists, this.fileList);
                this.showToast('移除成功');
            },
            handlerClick() {
                if (this.maxCount <= this.lists.length) {
                    this.showToast('最多上传'+this.maxCount+'个文件');
                    return;
                }
                appChooseFile().then(path => {
                    uni.showLoading()
                    const task = uni.uploadFile({
                        // 这里可以手动配置一下baseUrl
                        url: IMG_URL + this.action,
                        filePath: path,
                        name: 'file',
                        // formData: this.formData,
                        header: this.header,
                        success: res => {
                            console.log(res);
                            // 判断是否json字符串,将其转为json格式
                            let data = this.toJson && this.$u.test.jsonString(res.data) ? JSON.parse(
                                res
                                .data) : res.data;
                            if (![200, 201, 204].includes(res.statusCode)) {
                                this.uploadError(data);
                            } else {
                                // 上传成功
                                if (data.code == 401) {
                                    this.doRequest()
                                } else if (data.code != 200) {
                                    this.uploadError(data);
                                } else {
                                    console.log(data);
                                    this.lists.push(data.data)
                                    this.$emit('on-success', data,this.lists);
                                    uni.hideLoading();
                                }

                            }
                        },
                        fail: e => {
                            this.uploadError(e);
                        },
                        complete: res => {
                            this.$emit('on-change', res);
                        }
                    });
                    task.onProgressUpdate(res => {
                        if (res.progress > 0) {
                            this.$emit('on-progress', res);
                        }
                    });
                }).catch(() => {
                    this.lists.push({
                        "fileName": "1636506480(1)-已转档.pdf",
                        "fileUrl": "/dev-alone/uploadFiles/files/2021-12-15/1639548184077_416848.pdf"
                    })
                    uni.hideLoading();
                })
            },
            showToast(message, force = false) {
                if (this.showTips || force) {
                    uni.showToast({
                        title: message,
                        icon: 'none'
                    });
                }
            },
            uploadError(err) {
                uni.hideLoading();
                this.$emit('on-error', err);
                this.showToast('上传失败,请重试');
            },
        }
    }
</script>

<style scoped lang="scss">
    .audit {
        height: 50upx;
        line-height: 50upx;
        font-size: 26upx;
        width: 120upx;
        margin-left: 0;
        background-color: #529cf0;
        border-radius: 5upx;

        &::after {
            border-radius: 5upx;
        }
    }

    .text {
        // text-align: center;
    }
</style>

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,816评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,729评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,300评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,780评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,890评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,084评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,151评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,912评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,355评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,666评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,809评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,504评论 4 334
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,150评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,882评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,121评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,628评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,724评论 2 351

推荐阅读更多精彩内容