uni-app 使用plus.io 移动照片后 uni.chooseImage页面照片未更新 点击确定无返回值

uni-app 使用plus.io 移动照片后 uni.chooseImage页面照片未更新 点击确定无返回值

开发环境 版本号 项目创建方式
Windows win10 HBuilderX
产品分类:uniapp/App

PC开发环境操作系统:Windows

PC开发环境操作系统版本号:win10

HBuilderX类型:正式

HBuilderX版本号:3.4.7

手机系统:Android

手机系统版本号:Android 10

手机厂商:小米

手机机型:小米8se

页面类型:nvue

vue版本:vue2

打包方式:云端

项目创建方式:HBuilderX

示例代码:

```javascript
<template>  
<view class="body">  
    <button @click="test">test</button>  
</view>  

</template>  

<script>  
    export default {  
        data() {  
            return {  

            }  
        },  
        onLoad() {  

        },  
        onShow() {  
            plus.cache.clear()  
        },  
        methods: {  
            test(){  
                uni.chooseImage({  
                    count: 1,  
                    sizeType: ['original'],  
                    sourceType: ['album'], //从相册选择  
                    success: (res) => {  
                        console.log(res)  
                        let oldPath = res.tempFiles[0].path  
                        let newLocalPath = 'file:///storage/emulated/0/.Android'  
                        let fileName = '/test.jpg'  

                        plus.io.resolveLocalFileSystemURL( newLocalPath, function( newEntry ) {  
                            plus.io.resolveLocalFileSystemURL( oldPath, ( entry )=> {  
                                entry.moveTo( newEntry,fileName, function( entry ) {  
                                    console.log("移动成功!")  
                                    uni.chooseImage({  
                                        count: 1,  
                                        sizeType: ['original'],  
                                        sourceType: ['album'], //从相册选择  
                                        success: (res1) => {  
                                            console.log(res1)  
                                            plus.cache.clear()  
                                        }  
                                    })  
                                }, function ( e ) {  
                                    console.log("移动失败:"+JSON.stringify(e));  
                                } );  
                            },(e)=>{  
                                console.log("操作老路径失败:"+JSON.stringify(e));  
                            });  
                        })  

                    }  
                })  
            }  
        }  
    }  
</script>  

操作步骤:

uni.chooseImage({  
    count: 1,  
    sizeType: ['original'],  
    sourceType: ['album'], //从相册选择  
    success: (res) => {  
        let oldPath = res.tempFiles[0].path  
        let newLocalPath = 'file:///storage/emulated/0/.aaa'  
        let fileName = '/test.jpg'  
        plus.io.resolveLocalFileSystemURL( newLocalPath, function( newEntry ) {  
            plus.io.resolveLocalFileSystemURL( oldPath, ( entry )=> {  
                entry.moveTo( newEntry,fileName, function( entry ) {  
                    console.log("移动成功!")  
                    uni.chooseImage({  
                        count: 1,  
                        sizeType: ['original'],  
                        sourceType: ['album'], //从相册选择  
                        success: (res1) => {  
                            console.log(res1)  
                        }  
                    })  
                }, function ( e ) {  
                    console.log("移动失败:"+JSON.stringify(e));  
                } );  
            },(e)=>{  
                console.log("操作老路径失败:"+JSON.stringify(e));  
            });  
        })  
    }  
})

更多关于uni-app 使用plus.io 移动照片后 uni.chooseImage页面照片未更新 点击确定无返回值的实战教程也可以访问 https://www.itying.com/category-93-b0.html

5 回复

相册有数据库存储相关逻辑。该方式导致黑图出现这个问题我们会看下。 你这种从相册moveTo图片 属于违规行为 高版本系统会警告用户的。你可以选择拷贝但不能moveTo或删除

更多关于uni-app 使用plus.io 移动照片后 uni.chooseImage页面照片未更新 点击确定无返回值的实战教程也可以访问 https://www.itying.com/category-93-b0.html


这个我倒是试过了,复制然后删除原图片,我的小米会警告。但是单纯的移动,系统不会警告。可能系统不一样吧。

回复 l***@163.com: 移动到其他路径也属于删除行为

那请问一下现在使用h5+的plus.gallery.pick()要怎么获取图片原图?原图貌似是默认保存在DCIM路径下的,plus.io.resolveLocalFileSystemURL会报code 15错误。如果使用copyTo方法会不会导致文件件里多出来一堆重复图片?

在使用 uni-app 开发时,如果你使用了 plus.io 来移动照片,并且发现 uni.chooseImage 页面照片未更新,点击确定无返回值,可能是由于以下原因导致的:

1. 移动照片后未更新文件路径

  • 当你使用 plus.io 移动照片时,照片的文件路径可能已经发生了变化,但 uni.chooseImage 并未感知到这一变化。
  • 你需要确保在移动照片后,更新 uni.chooseImage 所使用的文件路径。

2. 异步操作未正确处理

  • plus.io 的移动操作是异步的,如果你在移动操作未完成时就调用了 uni.chooseImage,可能会导致 uni.chooseImage 无法正确获取到最新的文件路径。
  • 你需要在 plus.io 的移动操作完成后,再调用 uni.chooseImage

3. 文件路径权限问题

  • uni.chooseImage 可能无法访问你移动后的文件路径,尤其是当你将文件移动到应用沙盒之外的目录时。
  • 确保移动后的文件路径是 uni.chooseImage 可以访问的。

解决方案

1. 确保移动操作完成后再调用 uni.chooseImage

plus.io.moveFile(srcPath, destPath, function() {
    console.log('文件移动成功');
    // 移动成功后调用 uni.chooseImage
    uni.chooseImage({
        count: 1,
        success: function(res) {
            console.log('选择图片成功', res.tempFilePaths);
        },
        fail: function(err) {
            console.log('选择图片失败', err);
        }
    });
}, function(err) {
    console.log('文件移动失败', err);
});

2. 更新文件路径

  • 如果你在移动文件后需要手动更新 uni.chooseImage 的文件路径,可以通过设置 tempFilePaths 来实现。

3. 检查文件路径权限

  • 确保移动后的文件路径是 uni.chooseImage 可以访问的。你可以将文件移动到应用的沙盒目录中,例如 _doc_downloads 目录。

示例代码

// 假设你要将图片从 srcPath 移动到 destPath
let srcPath = '原始文件路径';
let destPath = '目标文件路径';

plus.io.moveFile(srcPath, destPath, function() {
    console.log('文件移动成功');
    
    // 移动成功后调用 uni.chooseImage
    uni.chooseImage({
        count: 1,
        success: function(res) {
            console.log('选择图片成功', res.tempFilePaths);
        },
        fail: function(err) {
            console.log('选择图片失败', err);
        }
    });
}, function(err) {
    console.log('文件移动失败', err);
});
回到顶部