php移动端上传图片,移动端图片上传实施分享

一.基本思路

1.相册(相机插件)取到图片地址拿到图片本地路径(pictureUrl)----->用于页面展示

2.通过图片本地路径将图片转化为base64格式---->用于上传

3.通过formdata格式上传图片

二.详细步骤

1,获取图片(以海马汇桥接为例)

拍照

takePhoto () {

let vm = this

var options = {

'allowEdit': true, // 拍完照后是否允许编辑

'editShape': 1, // 当allowEdit为true时,希望获取到的形状0圆形,1矩形, 2正方形

}

var param = {

className: 'CameraBridge',

function: 'takePicture',

params: options,

successCallBack: 'onSuccess',

failCallBack: 'onError',

}

HandBridge.postMessage(JSON.stringify(param))

// 成功回调

window.onSuccess = function (message) {

// message:图片地址

let img = {

pictureId: vm.randomUUID(),

pictureUrl: message, // 照片的地址

// imageName: vm.getImageName(message),

}

// vm.readFile(img)

// vm.showImgPreview = false

vm.showActionSheet = false

vm.image2Base64(img)

}

// 失败回调

window.onError = function (message) {

// vm.showImgPreview = false

vm.showActionSheet = false

alert(message)

}

},

相册选择

selectPhotoFormAlbum () {

let vm = this

// 调用方式

// var options = {

// maxImages: 1, // 仅对Android有效,如果不传该参数调用的是图片单选插件返回的为图片地址的字符串,如果参数值为大于等于1的整数则调用图片多选插件,返回数组

// }

var argument = {

className: 'CameraBridge',

function: 'getPicture',

// params: options,

successCallBack: 'onSuccess',

failCallBack: 'onError',

}

HandBridge.postMessage(JSON.stringify(argument))

// 成功回调

window.onSuccess = function (results) {

// alert('成功' + results)

let img = {

pictureId: vm.randomUUID(),

pictureUrl: results, // 照片的地址

// imageName: vm.getImageName(results),

}

// vm.readFile(img)

vm.showActionSheet = false

vm.image2Base64(img)

}

// 失败回调

window.onError = function (error) {

vm.showActionSheet = false

alert('Error: ' + error)

}

},

2.图片转base64格式

image2Base64 (img) {

let vm = this

// 成功回调

window.onSuccess = function (message) {

// alert(message)

let image = {

// thumbnailurl: img.pictureUrl,

pictureId: img.pictureId,

pictureUrl: img.pictureUrl, // file_path

// imageName: img.imageName, // file_name

}

let imgUrls = JSON.parse(message)

vm.imgList.push(image)

vm.addFile(imgUrls.data, img.pictureId, img.imageName)

}

// 失败回调

window.onError = function (message) {

alert(message)

}

var options = {

'filePath': img.pictureUrl,

'quality': 50, // 取值范围0-100 100时图片不压缩

}

var param = {

className: 'FileBridge',

function: 'image2Base64',

params: options,

successCallBack: 'onSuccess',

failCallBack: 'onError',

}

HandBridge.postMessage(JSON.stringify(param))

},

//添加用于上传的图片数组

addFile (file, pictureId, imageName) {

let img = {

pictureId: pictureId,

file: file,

// imageName: imageName,

}

this.imageTemArr.push(img)

// this.uploadImages()

},

3.图片上传

页面父组件调用

// 上传

uploadImages () {

let vm = this

vm.$hips.indicator.show({

spinColor: '#1f8ceb',

pureBackground: true,

})

vm.imageTemArr = []

return new Promise((resolve, reject) => {

vm.$refs.imageGroup.uploadImage().then(res => {

console.log(res)

vm.imgIdList = []

vm.$hips.indicator.hide({

spinColor: '#1f8ceb',

pureBackground: true,

})

if (res === 'S') {

console.log('无图片上传')

resolve('S')

} else {

if (res.data.success) {

res.data.data.forEach(function (item, index) {

let obj = {}

obj.pictureId = item.fileId

obj.pictureUrl = item.fileUrl

vm.imgIdList.push(obj)

})

resolve('S')

} else {

vm.$hips.toast({

message: '图片上传失败',

position: 'middle',

})

}

}

}, (err) => {

console.log(JSON.stringify(err))

}).catch(error => {

vm.imgIdList = []

console.log(JSON.stringify(error))

reject(error)

})

})

},

以上代码可以看到我们在父组件中调用图片组件的uploadImage方法

子组件uploadImage方法

uploadImage () {

return new Promise((resolve, reject) => {

let vm = this

if (vm.imageTemArr.length) {

imageService.uploadImage(vm.imageTemArr).then(res => {

resolve(res)

// alert('图片上传成功:' + res)

}).catch(error => {

// this.showPrompt('图片上传失败,请重新点击上传!')

alert('图片上传失败,请重新点击上传!')

console.log('图片上传失败,错误信息:' + error)

})

} else {

resolve('S')

}

})

},

在子组件中我们调用了公共服务imageService中的uploadImage方法真正实现上传

imageService中定义的uploadImage方法

uploadImage (imageTemArr) {

let imageList = []

imageTemArr.forEach(function (item, index) {

imageList.push(item.file)

})

let formData = new FormData()

formData.append('files', imageList) // 图片base64格式

let url = `https://*********.com/lightkits-center/v1/${window.localStorage.organizationId}/files/base64Batch`

return Axios.postFormData(formData, url)

},

这样就完整的实现了图片上传的功能

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值