uni-app IOS的UTS插件里代码生成的文件保存在沙盒目录里,转移到uni-app的_doc目录的问题。

发布于 1周前 作者 itying888 来自 Uni-App

uni-app IOS的UTS插件里代码生成的文件保存在沙盒目录里,转移到uni-app的_doc目录的问题。
在UTS的插件里,用swift的PDFKit生成了一个pdf文件,保存在了 file:///private/var/mobile/Containers/Data/Application/81B0FD5A-6170-4E21-899E-B423C5A33D79/tmp/1734014540322.831.pdf 里面。

nvue页面里面获取到了这个路径之后,有什么方便的方法把它转存到 plus.io.PRIVATE_DOC 目录里面吗?
我尝试了多次,都是不可读取,不知道是我的代码问题,还是本身不能这么操作。


2 回复

兄弟 解决了吗 碰到同样的问题


在uni-app项目中,若你需要将UTS插件生成的文件从iOS的沙盒目录转移到应用的_doc目录,可以通过原生的iOS代码来完成这一任务。以下是一个如何在uni-app项目中通过自定义原生插件来实现这一功能的示例。

1. 创建原生插件

首先,你需要创建一个iOS原生插件。在uni-app项目的nativeplugins目录下创建一个新的文件夹,比如FileTransferPlugin

2. 编写iOS原生代码

FileTransferPlugin文件夹中,创建FileTransferPlugin.hFileTransferPlugin.m文件。

FileTransferPlugin.h

#import <Foundation/Foundation.h>
#import <UniAppPlugin/UniModule.h>

@interface FileTransferPlugin : NSObject <UniModule>

- (void)transferFileFromSandboxToDocDirectory:(NSDictionary *)options success:(void (^)(NSDictionary *result))success fail:(void (^)(NSError *error))fail;

@end

FileTransferPlugin.m

#import "FileTransferPlugin.h"
#import <UIKit/UIKit.h>

@implementation FileTransferPlugin

- (void)transferFileFromSandboxToDocDirectory:(NSDictionary *)options success:(void (^)(NSDictionary *result))success fail:(void (^)(NSError *error))fail {
    NSString *sourcePath = [options[@"sourcePath"] stringByExpandingTildeInPath];
    NSArray *documentDirectories = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *destPath = [[documentDirectories firstObject] stringByAppendingPathComponent:[options[@"destFileName"] stringByExpandingTildeInPath]];

    NSError *error = nil;
    [[NSFileManager defaultManager] copyItemAtPath:sourcePath toPath:destPath error:&error];

    if (error) {
        fail(error);
    } else {
        success(@{@"destPath": destPath});
    }
}

@end

3. 注册插件

nativeplugins.json中注册这个插件:

{
    "plugins": {
        "FileTransferPlugin": {
            "package": "com.example.filetransfer",
            "platforms": ["ios"],
            "version": "1.0.0",
            "provider": "your_name"
        }
    }
}

4. 在uni-app中使用插件

在uni-app的JavaScript代码中调用这个插件:

const fileTransferPlugin = uni.requireNativePlugin('FileTransferPlugin');

fileTransferPlugin.transferFileFromSandboxToDocDirectory({
    sourcePath: 'path/to/source/file',
    destFileName: 'destination_file_name.ext'
}, (res) => {
    console.log('File transferred successfully:', res.destPath);
}, (err) => {
    console.error('File transfer failed:', err);
});

以上代码示例展示了如何在uni-app项目中通过原生插件将文件从iOS的沙盒目录转移到应用的_doc目录。请注意,你需要根据实际情况调整路径和文件名。

回到顶部