之前有部分读者想看下UNI如何自定义下载位置,其实方法很简单的,我也是忙于个人的问题,鸽了很久
之前我在plus.io这篇文章中讲过,官方应该是把plus.io
中的部分API封装成了uni.saveFile
这个API达到永久存储的目的,但是容易出现的问题就是转存的位置是固定的就在uniapp_save
这个文件夹里面,开发人员遇到定制化的业务需求需要将东西存储到固定的文件夹,或者是对存储的文件进行自定义命名等操作。这里就需要用到plus.io
这个API了。
要想自定义目录,第一步肯定必不可少的就是创建目录了,利用docEntry.getDirectory
API直接在指定目录下查看是否有自己寻找的目录,传入create:true
可以实现没有目录就新建目录的功能,当然用createEntry
也可实现,大家可以自己去试一试。
plus.io.resolveLocalFileSystemURL('_doc',docEntry=>{ // 打开doc目录
docEntry.getDirectory('uniapp_save', {create:true,exclusive:false})
})
第二部就是将下载的文件转存到这个文件夹里
//模拟下载一张图片
let [,res] = await uni.downloadFile(...);
//res为downloadFile返回的临时路径
plus.io.resolveLocalFileSystemURL(res.tempFilePaths,tempFile=>{
//tempFile:利用resolveLocalFileSystemURL拿到临时路径的i/o信息
plus.io.resolveLocalFileSystemURL('uniapp_save',photoEntry=>{
//photoEntry: 查询得到uniapp_save这个文件夹的目录信息
//利用copyTo或者moveTo实现文件的复制和剪切,
//参数的第二个为转移后给文件起的名字,不填的话就是原来的名字。
let fileType = (/([^\\/]+)\.([^\\/]+)/i).exec(res.tempFilePaths)
tempFile.copyTo(photoEntry,`${new Date().getTime()}.${fileType}`,savedFile=>{
....
})
})
})
})
这样就实现了uni.saveFile的模拟,具体更多的自定义IO操作可以去plus.io进行查阅