图片上传与回显
图片上传
此处使用的是iview的upload
<Upload
ref="upload"
multiple
:format="['jpg','png','pdf']"
type="drag"
action="/"
:max-size="20480"
:show-upload-list="true"
:on-exceeded-size="handleMaxSize"
:before-upload="handleBeforeUpload"
>
<div class="file-upload">
<div>
<Icon type="ios-cloud-upload" size="52" style="color:#C4C7CF"></Icon>
<p>点击或将文件拖拽到这里上传</p>
<p class="text">仅支持.jpg .png .pdf文件格式</p>
</div>
</div>
</Upload>
此处是上传限制大小,大文件可利用blob对象实现大文件分片上传。
// 上传
handleBeforeUpload(file) {
var size = file.size / 1024// KB
if (size > 20480) {
this.handleMaxSize(file)
return false
}
this.getUpload(file, 1)
return false
},
getUpload(file) {
// 展示上传图片(显示的是本地图片)
this.file = file
const reader = new FileReader()
reader.readAsDataURL(file)
reader.onload = () => {
// 此处的_base64可以放到img标签中进行展示
const _base64 = reader.result
}
// 接下来可以使用后端的接口上传图片
// 上传
const formData = new FormData()
formData.set('files', file)
formData.set('参数1', 'aaa')
formData.set('参数2', 'bbb')
toUpload(formData).then(res => {
if(res.data.code === '200') {
// 此处return false是阻止upload组件的默认上传事件 就是组件的那个action
return false
} else {
this.$Message.error(res.data.message)
}
})
}
图片回显
后端接口返回的是二进制流文件
1.可以将二进制流文件转换成base64然后放到img中进行展示
preview() {
preview({ key1:'value' }).then(res => {
const blob = new Blob([res.data], { type: 'image/png' })
const Fr = new FileReader()
Fr.readAsDataURL(blob)
Fr.onload = (event) => {
this.isUpload = true
// 这个就是转换为的base64图片地址
const _base64 = reader.result
}
})
2.URL.createObjectURL生成的图片的URL
preview() {
preview({ key1:'value' }).then(res => {
this.src = window.URL.createObjectURL(res.data)
this.isUpload = true
this.logoPreview.push(this.src)
})
效果图: