},
watch: {
imgStatus () {
if (this.imgStatus === 'uploading') {
this.submit() # ⑦
}
},
imgStore () {
if (this.imgStore.length <= 0) {
this.$store.commit('set_img_status', 'ready') // 更新文件上传状态
}
}
}
}
</script>
<style lang="less" scoped>
...
</style>
以上代码中有一些注释序号,是此插件设计的主要思路,其他代码都比较容易理解,分别说下
① 选择文件后执行,img_status状态变为selected。
② 将带上传的图片文件转化为Base64格式,用于缩略图显示。
③ 创建一个表单对象,用于存储待上传的文件。
④ 注意这里的name属性值,暂时写死,后面设计打算从组件中指定name属性,如果是多文件的话,name属性的数组序号从0开始递增。
⑤ 未依赖任何Ajax请求插件,使用原生的XMLHttpRequest对象创建请求。
⑥ 存储上传成功后服务器返回的上传路径。
⑦ 检测上传状态,当在使用此插件时将img_status的状态设置为uploading时执行上传操作。
使用
参考本项目的GItHub和NPM。
注意
使用此插件时,需要与后端约定返回的数据格式,如下:
[{“error”:0,”url”:”/uploads/api/201711/25/fde412bd83d3ec5d6a49769bd0c143cd.jpg”},{“error”:0,”url”:”/uploads/api/201711/25/c6fd51f0388c63a0b6d350331c945fb1.jpg”}]
预览如下:

返回的是一个上传后的路径数组,包括error和url字段,每个文件有自己的上传状态,当error为0的时候为上传成功,并返回上传后的路径url
改进
后续版本打算进行如下改进
把表单的name属性名称通过组件传递。
自定义上传成功后服务器响应的数据格式,比如自定义error的名称和其值所表示的状态。
支持其他类型文件的上传,可以在组件中自行制定上传的文件类型,及其预览方式。










