一、图片change事件

const handleBgChange: UploadProps['onChange'] = async (uploadFile) => {

//调用像素校验方法

const pxResult = await verificationPicPx(uploadFile.raw!, 600, 840)

if (!pxResult) {

ElMessage.error('图片尺寸仅支持:600px*840px')

return

}

//调用格式校验方法

const typeResult = verificationPicType(uploadFile.raw!)

if (!typeResult) return

//如果都校验通过,页面显示图片

configInfo.info.img_url = URL.createObjectURL(uploadFile.raw!)

//准备图片上传数据

const formData = new FormData()

formData.append('type', 'object')

formData.append('title', 'file')

formData.append('file', uploadFile.raw!)

progressSeen.value = true //上传进度条

const uploadProgress = (progressEvent: any) => {

var complete = ((progressEvent.loaded / progressEvent.total) * 100) | 0

progress.value = complete

} //上传进度计算

const { code, data } = (await upload(formData, token, {

onUploadProgress: uploadProgress

})) as any

if (code == 0) {

//显示上传成功后返回的路径

configInfo.info.img_url = data.img_url

}

}

二、下面是尺寸,格式,大小各自的校验方法

/**

* 上传的图片格式判断

* @param {blob} file: 上传的图片文件

* @returns {boolean} 验证结果

*/

const verificationPicType = (file: File) => {

if (!file) return false

//格式类型

var fileTypes = ['image/jpg', 'image/png', 'image/gif'] // 图片限制的格式类型

if (!fileTypes.includes(file.type)) {

ElMessage.warning('当前图片仅支持格式为:' + fileTypes.join(' ,'))

return false

}

//判断size

if (file.type == 'image/jpg' || file.type == 'image/png') {

const result = verificationPicSize(file, 200, 'K')

if (!result) {

ElMessage.error('jpg/png小于200k')

return false

} else {

return true

}

} else if (file.type == 'image/gif') {

const result = verificationPicSize(file, 2, 'M')

if (!result) {

ElMessage.error('gif小于2m')

return false

} else {

return true

}

}

}

/**

* 上传的图片大小判断

* @param {blob} file: 上传的图片文件

* @param {number} limit: size限制

* @param {string} unit: size单位

* @returns {boolean} 验证结果

*/

const verificationPicSize = (

file: File,

limit: number,

unit: string

): boolean => {

if (!file || !limit || !unit) return false

if (unit == 'K') {

if (file.size / 1024 > limit) {

return false

} else {

return true

}

} else if (unit == 'M') {

if (file.size / 1024 / 1024 > limit) {

return false

} else {

return true

}

} else {

return false

}

}

/**

* 上传的图片尺寸校验

* @param {blob} file: 上传的图片文件

* @param {number} imgWidth: 图片宽度

* @param {number} imgHeight: 图片高度

* @returns {boolean|Promise} 验证结果

*/

const verificationPicPx = (file: Blob, imgWidth: number, imgHeight: number) => {

if (!file || !imgWidth || !imgHeight) return false

// 获取文件尺寸,判断尺寸在不在规定范围之内

return new Promise(function (resolve, reject) {

let reader = new FileReader()

reader.readAsDataURL(file)

reader.onload = function (theFile: any) {

const image = new Image()

image.src = theFile.target?.result

image.onload = function (res: any) {

if (res.target.width !== imgWidth || res.target.height !== imgHeight) {

resolve(false)

} else {

resolve(true)

}

}

}

})

}

三、axios请求传参

//图片上传

export function upload(data:any,token: string,config:any) {

return POST('xxx', data, {

Authorization: token,

'Content-Type':'multipart/form-data'

},config)

}

//POST封装

export function POST(url: string, data: any, headers: any = {},config?:any) {

return httpRequest.post(url, data, {

headers: {

...headers

},...config

})

}

参考链接

评论可见,请评论后查看内容,谢谢!!!评论后请刷新页面。