OSS管理文件(Node.js)

let OSS = require('ali-oss');
let config = {
    region: 'oss-cn-hangzhou', //你的Region  注意 这个只要 空间名 不要 http:// 和 .aliyunoss.com !!
    //secure: true,
    accessKeyId: XXXX,//你的accessKeyId
    accessKeySecret: XXXX,//你的accessKeySecret
    bucket: 'ipb'
};

/** 
 * 配置
 */
let init = () => {
    return new OSS(config);
}

/** 
 * 生成uuid
 */
let guid = () => {
    let S4 = () => {

        return (((1 + Math.random()) * 0x10000) | 0).toString(16).substring(1);
    }
    return (S4() + S4() + "-" + S4() + "-" + S4() + "-" + S4() + "-" + S4() + S4() + S4());
}

/** 
 * 修改文件名字
 */
let fileName = (file,key) => {
    let arr = file.name.split(".");
    var uuid = guid();
    if (arr.length > 1) {
        return key + uuid + '.' + arr[arr.length - 1];
    } else {
        return uuid;
    }
}

/**
 * 上传文件
 */
apis.getOssToken({
        roleSessionName: 123
    })
    .then(res => {
        console.log(res)

    })



let ossPut = (file,key) => {
    return new Promise((resolve, reject) => {
        let objectName = fileName(file,key);
        init().put(objectName, file).then(({
            res,
            url
        }) => {
            if (res && res.status == 200) {
                console.log('阿里云OSS上传文件成功回调', res, url, objectName);

                let data = {
                    res: res,
                    url: url,
                    objectName: objectName
                };
                resolve(data);
            }
        }).catch((err) => {
            console.log('阿里云OSS上传文件失败回调', err);
            reject(err)
        });
    })
}

/**
 * 下载文件
 */
let ossGet = (name) => {
    
    return new Promise((resolve, reject) => {
        let signUrl = init().signatureUrl(name, {expires: 300});
        resolve(signUrl);
    })
}

let ossDel = (name) => {
    return new Promise((resolve, reject) => {
        init().delete(name).then((res) => {
            if (res && res.status == 200) {
                console.log('阿里云OSS删除文件成功回调', res);
                resolve(res);
            }
        }).catch((err) => {
            console.log('阿里云OSS删除文件失败回调', err);
            reject(err)
        });
    })
}

export default {
    ossPut,
    ossGet,
    ossDel
}

调用

<el-form-item label="头像" class="user">
                            <el-input type="hidden"></el-input>
                            <el-upload class="iptImg" ref="uploadAvatar" action list-type="picture-card" :http-request="uploadImg"
                             :before-upload="beforeUploadImg" :on-remove="removeFileForm" :on-exceed="exceedFileForm">
                                <img v-if="addForm.url" :src="addForm.url" class="avatarDis" />
                                <i v-else class="el-icon-plus avatar-uploader-icon"></i>
                            </el-upload>
                        </el-form-item>


<script>
export default {
data() {
return {
addForm: {
avatar: "",
                    url:"",
}
}
},

methods: {
//图片类型验证
            beforeUploadImg(file) {
                const isJPG = file.type === "image/jpg";
                const isJPEG = file.type === "image/jpeg";
                const isPNG = file.type === "image/png";
                const isGIF = file.type === "image/gif";
                const isBMP = file.type === "image/bmp";
                if (!isJPG && !isJPEG && !isPNG && !isGIF && !isBMP) {
                    this.$message.error("只能上传图片格式为jpg,jpeg,png,gif,bmp!");
                }
                return isJPG || isJPEG || isPNG || isGIF || isBMP;
            },

            //点击图片上传
            uploadImg(file) {
                // this.addForm.file.push(file.file);
                // console.log(this.addForm.file);
                if(this.addForm.avatar != "" && this.addForm.avatar != null){
                    this.removeFileForm(file);
                }
                this.$ossClient
                    .ossPut(file.file, "PartyMember/")
                    .then(res => {
                        this.addForm.avatar = res.objectName;
                    })
                    .catch(e => {
                        console.log(e);
                    });
            },

            //移除文件
            removeFileForm(file) {
                // this.addForm.file.splice(this.addForm.file.indexOf(file.raw), 1);
                // console.log(this.addForm.file);
                this.$ossClient
                    .ossDel(this.addForm.avatar)
                    .then(res => {
                        this.addForm.avatar = "";
                    })
                    .catch(e => {
                        console.log(e);
                    });
            },
//超出数量限制
            exceedFileForm() {
                this.$message.error("最多上传1个头像");
            },
//数据回显
            getPartyInfo() {
                this.partyId = this.$route.query.partyId;
                axios({
                        method: "get", //请求方式
                        url: "/api/commonPartyMember/getPartyMember", //请求地址
                        params: {
                            id: this.partyId
                        }
                    })
                    .then(res => {
                        this.addForm.avatar = res.data.data.avatar;
                        if (this.addForm.avatar != "" && this.addForm.avatar != null) {
                            this.$ossClient
                                .ossGet(this.addForm.avatar)
                                .then(res => {
                                    this.addForm.url = res;
                                })
                                .catch(e => {
                                    console.log(e);
                                });
                        }

                    })
                    .catch(err => {
                        console.log(err);
                    });
            },

},

}


</script>

 

posted @ 2020-07-13 16:24  艺洁  阅读(854)  评论(0编辑  收藏  举报