FinClip为企业提供小程序生态圈技术产品,开发者可在FinClip小程序开发帮助中心找到相关FinClip小程序指引

# 小程序文件管理

# 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];
© FinClip with ❤ , Since 2017