欢迎来到站圈网!

php远程媒体七牛node摇摇

投稿中心

JavaScript

当前位置: 主页 > Web前端 > JavaScript

uniapp组件uni-file-picker中对上传的图片进行压缩至1兆以内(推荐)

时间:2022-11-14|作者:youmi_sunshine|点击:

目录

我在做uniapp项目时,用的uni-file-picker组件,这是我做的一个项目实例,主要是将图片通过接口传至后台服务器

uniapp组件uni-file-picker中对上传的图片进行压缩至1兆以内(推荐)

如果只是上传一张照片的话 还没有什么大问题,但是如果一连上传很多个图片,像我这个项目一样,而且有的图片特别大,我这边遇到一个上传照相机的照片就有10兆多,有的手机内存不足,临时空间不够,就会出现白屏的情况。

解决方法:

一、先开启uni-file-picker组件里对于压缩图片的配置项 sizeType,默认是有两个选项的:

  • original :正常
  • compressed:压缩

这是组件源码里显示传参的参考:

sizeType: {
	type: Array,
	default () {
		return ['original', 'compressed']
	}
},

所以在调用uni-file-picker组件时,就可以进行设置,如下:

 :sizeType="sizeType" 表示的是压缩图片的设置
data中设置sizeType的值:

export default {
    data() {
        return{
            mentouValue:{},          //图片value值
            sizeType:['compressed'], //设置图片压缩
            sourceType:['camera'],   //这里设置的是只能使用照相机,不能从相册里传照片
        }
    },
}

通过以上设置,可以实现对图片进行压缩 一般是对半压缩的,比如5兆压缩成2.5兆左右这样的。
如何进行检验:本地是检验不出来的,需要拿手机进行真机调试,才可以看出来文件压缩后的大小

如果对图片大小没有太大限制 ,直接这样压缩就可以了,但是有的项目会限制对图片的大小必须小于1兆,这时候,光有这个设置,就满足不了需求了,这时候我们可以再采取一点措施

二、将图片再次进行压缩,压缩至1兆以下,再传至服务器中:

      1、先创建一个方法imageCompress,一般单独放在公共函数里

// 图片压缩递归,小于1M跳出
export function  imageCompress(file){
	return new Promise((resolve, reject)=>{
		let { size,path } = file
		let type  = path.split(".")[1]
		//大于1M进行压缩,
		if(size< (1024*1024)){
			resolve(file)
			return false
		}
		uni.compressImage({
			src: path,
			quality: 80,
			success: res => {
				let newPath = res.tempFilePath+type
				let newName = res.tempFilePath.split("/")[res.tempFilePath.split("/").length-1]+type
				uni.getFileInfo({
					filePath:res.tempFilePath,
					success:async (info)=>{
						let newFile = {...file,size:info.size,path:newPath,name:newName,tempFilePath:res.tempFilePath}
						resolve(await imageCompress(newFile))
					}
				})
			}
		})
		
	})
	
}

  2、调用uni-file-picker组件的页面中,调用该方法,然后再上传图片

import { imageCompress } from "@/utils/index.js" 
import { baseUrl } from "@/utils/request"
export default {
    data() {
        return{
            mentouValue:{},          //图片value值
            sizeType:['compressed'], //设置图片压缩
            sourceType:['camera'],   //这里设置的是只能使用照相机,不能从相册里传照片
            file:{},
            type:'',
            workId:''
        }
    },
    onLoad(option) {
		this.workId = option.workId
	},
    methods:{
        //选择照片
        mentouSelect(e){
			this.timeSeting()
			if(e.tempFilePaths&&e.tempFiles){
				this.file = e.tempFiles[0].file
                this.type = 'mentou'
				this.toUpload()	
			}
		},
 
        // 删除照片
		mentouDelete(e){
			this.mentouValue = {}
		},
 
        // 上传照片
        async toUpload(){
			// 压缩图片
			this.file = await imageCompress(this.file)
            // 要传的参数
			let params = {
				file:this.file,
				type: this.type,
				workId:this.workId
			}
			// 上传图片到相依的接口
			uni.uploadFile({
				url: baseUrl+'/app/uploadImage', //这里为拼接的接口地址
				filePath: this.file.tempFilePath?this.file.tempFilePath:this.file.path,
				fileType: "image",
				formData:{...params},
				name: 'file',
				header: {
					'content-type': 'multipart/form-data',
				    "Authorization": uni.getStorageSync('Authorization'),
					"refToken": uni.getStorageSync('refToken')
				},
				success: uploadFileRes => {
					let imageName = JSON.parse(uploadFileRes.data).data
                    // 这里可以对返回的参数进行处理了
					uni.showToast({ title: '上传成功', icon: "success" });
				},
				fail(err) {
					uni.showToast({ title: '上传失败', icon: "error" });
				}
			})				
		},
		
    }
}

这样写完后,图片就会被压缩至1兆以下,然后再传给后端了,亲测有效哦

到此这篇关于uniapp组件uni-file-picker中对上传的图片进行压缩至1兆以内的文章就介绍到这了,更多相关uniapp压缩图片上传内容请搜索站圈网以前的文章或继续浏览下面的相关文章希望大家以后多多支持站圈网!

版权声明:本文内容由小编收集网络,均来自网络用户自发贡献,版权归原作者所有,Web前端、电脑编程学习类网站不拥有其著作权,亦不承担相应法律责任。具体规则请查看《Web前端、电脑编程学习类网站用户服务协议》和《Web前端、电脑编程学习类网站知识产权保护指引》。如果您发现本站中有涉嫌抄袭的内容,填写联系本站管理员,一经查实,管理员将立刻删除涉嫌侵权内容。

上一篇:uniapp组件uni-file-picker中设置使用照相

下一篇:React setState是异步还是同步原理解析

本文标题:uniapp组件uni-file-picker中对上传的图片进行压缩至1兆以内(推荐)

本文地址:https://www.zhano.cn/JavaScript/67879.html

AD300

广告投放 | 联系我们 | 版权申明 | SiteMap

重要申明:本站所有的文章、图片、评论等,均由网友发表或上传并维护或收集自网络,属个人行为,与本站立场无关。

如果侵犯了您的权利,请与我们联系,我们将在24小时内进行处理、任何非本站因素导致的法律后果,本站均不负任何责任。

联系QQ:15234109 | 邮箱:15234109#qq.com(#换成@)

Copyright © 2019-2022 豫ICP备19001789号