# 小程序文件管理
# 1. 保存文件至当前小程序临时目录
支持的app类型
小程序✅ 小游戏✅ H5应用✅
SDK支持原生保存文件到小程序的缓存目录,然后返回文件的本地路径,以供小程序使用。
/**
保存文件到小程序的缓存路径
@param fileData 文件的二进制数据
@param fileName 文件名,需要保证文件名唯一,否则可能会覆盖
@return 文件的本地路径,例如:finfile://tmp_b118e2e5e2618d4d8bbbb7b0a3ad806a.jpg
*/
- (NSString *)saveFile:(NSData *)fileData fileName:(NSString *)fileName;
# 2. 生成finfile协议路径
小程序中的finfile协议路径有三种:finfile://tmp_ 、finfile://store_、finfile://usr/。tmp类型路径是保存在小程序运行目录下,下次冷启动小程序时会被清除;store路径会持久化保存,当删除小程序时才会删除;usr类型路径也会持久化保存,但是只可以自定义文件名以及保存目录。
该函数,可以传入文件名和要保存的路径类型,生成一个finfile协议路径,以供小程序中使用。但是文件不一定存在,要结合其他api,往对应文件内协议内容。
支持的app类型
小程序✅ 小游戏✅ H5应用✅
/**
生成finfile协议路径
@param fileName 文件名。pathType为FATFinFileDirUsr时,支持文件夹,如/aaa/abc.jpg,其他类型不支持带路径
@param pathType Finfile的目录类型,详情参考FATFinFilePathType
@return finfile协议的路径
*/
- (NSString *)generateFinFilePath:(NSString *)fileName pathType:(FATFinFilePathType)pathType;
示例代码:
NSString *filePath = @"abc.txt";
NSString *finfilepath = [[FATClient sharedClient] generateFinFilePath:filePath pathType:FATFinFilePathTmp];
// 返回值:finfile://tmp_b118e2e5e2618d4d8bbbb7b0a3ad806a.txt
# 3. 小程序文件路径转换为绝对路径
支持的app类型
小程序✅ 小游戏✅ H5应用✅
在有些场景下,宿主app拿到小程序的finfile协议路径,无法使用,这时可以用该方法将finfile协议路径转换为绝对路径。
比如,在使用小程序的转发功能时,返回的图片路径是小程序文件路径,可以用该方法转换为绝对路径,然后获取到图片数据再去调起第三方分享。 再比如,自定义api里,可以传递小程序finfile协议路径的参数,宿主app用该方法转换为绝对路径后,即可拿到文件数据。
使用该api,传入finfile协议路径时,文件必须存在;如果文件不存在,则会返回nil;同时需要小程序正在运行。
/**
将文件路径转为绝对路径
如果是 网络文件路径,则直接返回。
如果是小程序中的路径,比如finfile://tmp_b118e2e5e2618d4d8bbbb7b0a3ad806a.jpg ,则会转为本地绝对路径。(文件不存在,则会返回nil)
如果是小程序包中的文件路径,比如image/abc.jpg,也会转为绝对路径
其他情况则返回传入的路径
@param path 文件路径
@return 文件的绝对路径
*/
- (NSString *)fat_absolutePathWithPath:(NSString *)path;
示例代码:
NSString *finfilePath = @"finfile://tmp_7C82E6C26B7627334E88355E9D286621.mp4";
NSString *path = [[FATClient sharedClient] fat_absolutePathWithPath:filePath];
# 4. finfile路径转换为绝对路径
支持的app类型
小程序✅ 小游戏✅ H5应用✅
在有些场景下,我们拿到小程序的finfile文件路径,需要转换成沙盒路径,这时可以用该方法转换为沙盒路径。
该api,是fat_absolutePathWithPath:
的升级版本,转换绝对路径更加灵活。即使小程序未运行,finfile文件不存在,也能够将finfile路径转换为绝对路径。使用该api可以更加灵活的往小程序目录下保存文件。
/// 将finfile路径转换成真实路径,如果传入的finfilePath不是finfile协议,返回nil
/// appletId 小程序id,可不传;不传时会去获取当前小程序id(有可能为空)
/// @param finfilePath finfile路径
/// @param needFileExist 是否需要文件存在,传YES,如果传入的finfile路径的文件不存在,返回nil;传NO,不管文件是否存在,都返回对应的路径
- (NSString *)absolutePathWithAppletId:(NSString *_Nullable)appletId finFilePath:(NSString *)finfilePath needFileExist:(BOOL)needFileExist;
示例代码:
NSString *finfilePath = @"finfile://tmp_7C82E6C26B7627334E88355E9D286621.mp4";
NSString *path = [[FATClient sharedClient] absolutePathWithAppletId:@"小程序id" finFilePath:finfilePath needFileExist:YES];
# 5.获取小程序包内的文件绝对路径
支持的app类型
小程序✅ 小游戏✅ H5应用🚫
传入小程序包内的文件路径,返回该文件的绝对路径。
/**
获取小程序包内文件的完整路径,或临时文件的完整路径
@param fileName 文件名
@return 文件的完整路径
*/
- (NSString *)getFileAddressWithfileName:(NSString *)fileName;
示例代码:
NSString *fileName = @"test.png";
NSString *path = [[FATClient sharedClient] getFileAddressWithfileName:filePath];