MuxueTong
MuxueTong
  • 发布:2021-04-16 12:46
  • 更新:2021-06-17 14:12
  • 阅读:4053

uni-app中如何修改文件名?

分类:uni-app

各位大神,难道uni-app连文件名修改的api都没有吗?小白无能没有找到,各位大神,帮帮忙。谢谢

2021-04-16 12:46 负责人:无 分享
已邀请:
MonikaCeng

MonikaCeng

复制一份,命名为其它名字,然后删除旧的

  • samshum22

    你這個方法是可行的,但沒有可行的通道呀

    就連uni.download和save也要另外自己寫方法才可以配合使用,不然不知道下載自己了什麼

    2021-06-15 16:30

samshum22

samshum22

這是你要的改名:

let entry1,entry2  
//把原文件製成所需對象:  
plus.io.resolveLocalFileSystemURL('/storage/emulated/0/YOUR_PATH/01.mp4',function(res){  
    entry1 = res  
},function(){  
    console.log('fail')  
})  
//把改名後的路徑製成所需對象:   
plus.io.resolveLocalFileSystemURL('/storage/emulated/0/YOUR_PATH/',function(res){  
    entry2 = res  
},function(){  
    console.log('fail')  
})  
//正式改名   
function myMoveTo () {  
    entry1.moveTo(entry2,'02.mp4',function(res2){   //02.mp4為新名  
        console.log(res2)  
    },function (res3){  
        console.log(res3)  
    })  
}  
// 由於製成所需對象的fucntion 是同步的,直接運行myMoveTo() 時, entry1及entry2 仍是空值,這此就用最簡單的settimeout去'讓子彈飛' ,你可以自行改為promise方法  
setTimeout(()=>{  
    myMoveTo()  
},1000)  
  • 品茗信息技术

    很强!!!补充一下:如果想利用该方案打开文件的话,在正式改名部分的参数为res2的方法里利用res2.fullPath就可以了。

    2022-05-31 19:20

samshum22

samshum22

再把rename簡化:
其實第二個OBJ只須要 路徑資料(fullPath). 所以手寫了一個試試, 結果真的成功.
在只須做一個對象的情況下,可以如此簡化:

test() {  
    let DirPath = '/storage/emulated/0/YOUT_PATH/'  
    let oldName = '02.mp4'  
    let newName = '01.mp4'  
    plus.io.resolveLocalFileSystemURL(DirPath + oldName, function(targetFileEntry) {  
        targetFileEntry.moveTo({  
            fullPath: DirPath   //自製對象在此  
        }, newName, function(obj) {  
            console.log('成功', obj)  
            for(let i=0; i < Object.keys(obj).length; i  ) {  
                console.log("value "  i   " "   obj[Object.keys(obj)[i]])  
            }  
        }, function(e) {  
            console.log(e)  
        })  
    },function(e){  
        console.log(e)  
    })  
},

不過uniapp真的要吐槽一下targetFileEntry 打印出來是 [object object] 不能被 JSON.parse 或 JSON.stringify ,第一次遇到,

MuxueTong

MuxueTong (作者)

这是神回复吧?uni-app的api之中有改文件名的吗?用api、组件、插件都行,有知道的说个话。比如 renamefile(oldname,newname)之类的函数、过程。不是在Windows中手工改名

  • MonikaCeng

    没有,我找过了

    2021-04-18 17:12

samshum22

samshum22

有方法,但很費資源:

用 plus.downloader
url 為http://localhost:13131/storage/emulated/0/abc/eee.png
更改option-filename: 'file://storage/emulated//0/abc/ffff.png' //<<最後為你想改的名

然後再把舊的檔案刪走

以上只是思路,還未來得及試,明天會試

  • MonikaCeng

    那跟copy再删除一样

    2021-06-15 19:35

  • samshum22

    回复 MonikaCeng: 對! 昨天最後才試得出來,那個回覆是比較早試了一下, 連copy也copy不到的情況下才回覆的 , 因為當時url 試不中 ,當時用了file://storage/emulated/..... 試了很久,都不行

    2021-06-16 09:46

samshum22

samshum22

以下用來創建dir:

test() {  
    plus.io.resolveLocalFileSystemURL(  
    '/storage/emulated/0/',  
    function(entry) {  
         console.log(entry)  
         entry.getDirectory('/storage/emulated/0/YOUR_PATH',{create:true},function(dir){  //YOUR_PATH為你的資料夾  
         },function(){  
              alert( e.message );  
              })  
        })  
    },

以下用於del: #! 超傻的設計,會把自己本身都del (如:'storage/emulated/0/YOUR_PATH' , 'YOUR_PATH' 本身都會被del)

test() {  
    plus.io.resolveLocalFileSystemURL(  
    '/storage/emulated/0/YOUR_PATH',  //<<<<位置  
    function(entry) {  
         console.log(entry)  
         entry.removeRecursively()  
        })  
    },

rename功能明天再幫你試,好像有點難.

该问题目前已经被锁定, 无法添加新回复