HarmonyOS 鸿蒙Next 哪位大神能把下面iOS代码翻译成鸿蒙的,要求不能用picker保存(因为会弹窗,不需要弹窗)。文件管理沙箱我没看明白

发布于 1周前 作者 bupafengyu 来自 鸿蒙OS

HarmonyOS 鸿蒙Next 哪位大神能把下面iOS代码翻译成鸿蒙的,要求不能用picker保存(因为会弹窗,不需要弹窗)。文件管理沙箱我没看明白

      NSString *result = [NSString stringWithFormat:@"%@",success[@“data”][@“data”][0][@“content”]];

            //            NSData *data = [[NSData alloc] initWithBase64EncodedString:result options:0];

            //            NSString *ret = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];

            

            dispatch_async(dispatch_get_global_queue(0, 0), ^{

                NSData *data = [MBKGTMBase64 decodeString:result];

                

                //下载PDF到本地 使用同步下载方法,不使用AFNetworking

                //                NSData *data = [NSData dataWithContentsOfURL:requestUrl];

                NSData *doubi = data;

                //  二进制流写入文件

                NSString *documentsDirectory = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)lastObject];

                

                NSFileManager *fileManger = [NSFileManager defaultManager];

                NSString *testDirectory = [documentsDirectory stringByAppendingString:@"/test"];

                

                //  创建目录

                [fileManger createDirectoryAtPath:testDirectory withIntermediateDirectories:YES attributes:nil error:nil];

                //时间戳

                NSString *timeString = [NSString stringWithFormat:@"%@%@", [self getTimeNow],@".pdf"];

                //  创建文件

                NSString *testPath = [testDirectory stringByAppendingPathComponent:timeString];

                //  写入文件

                

                [fileManger createFileAtPath:testPath contents:doubi attributes:nil];

                


更多关于HarmonyOS 鸿蒙Next 哪位大神能把下面iOS代码翻译成鸿蒙的,要求不能用picker保存(因为会弹窗,不需要弹窗)。文件管理沙箱我没看明白的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html

3 回复

你上面代码,是将二进制流写入沙箱文件,你可以参考下述代码,核心就是使用ohos.file.fs进行文件读写

示例代码:

import { fileIo as fs, ReadOptions } from '@kit.CoreFileKit';
import { common } from '@kit.AbilityKit';

// 获取应用文件路径 let context = getContext(this) as common.UIAbilityContext; // 沙箱文件目录 let filesDir = context.filesDir;

async function readWriteFileWithStream(): Promise<void> { // 创建并打开输入文件流 let inputStream = fs.createStreamSync(filesDir + ‘/test.txt’, ‘r+’); // 创建并打开输出文件流 let outputStream = fs.createStreamSync(filesDir + ‘/destFile.txt’, “w+”);

let bufSize = 4096; let readSize = 0; let buf = new ArrayBuffer(bufSize); let readOptions: ReadOptions = { offset: readSize, length: bufSize }; // 以流的形式读取源文件内容并写入到目标文件 let readLen = await inputStream.read(buf, readOptions); readSize += readLen; while (readLen > 0) { const writeBuf = readLen < bufSize ? buf.slice(0, readLen) : buf; await outputStream.write(writeBuf); readOptions.offset = readSize; readLen = await inputStream.read(buf, readOptions); readSize += readLen; } // 关闭文件流 inputStream.closeSync(); outputStream.closeSync(); }

参考文档:https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/app-file-access-V5#以流的形式读写文件

更多关于HarmonyOS 鸿蒙Next 哪位大神能把下面iOS代码翻译成鸿蒙的,要求不能用picker保存(因为会弹窗,不需要弹窗)。文件管理沙箱我没看明白的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


你这个就是往沙盒写入文件啊,直接写入文件就是

fs.writeSync

将iOS代码翻译成鸿蒙代码时,特别是在处理文件选择和保存功能时,需要特别注意鸿蒙的文件管理沙箱机制。以下是一个基于鸿蒙的文件选择并处理(不使用picker弹窗)的示例代码片段:

// 鸿蒙代码示例(使用ArkTS框架)
@Entry
@Component
struct FileHandler {
  @State fileUri: string = ""

  chooseFile() {
    file.requestPermissions([file.Permissions.READ_EXTERNAL_STORAGE])
      .then(() => {
        file.pickFile({
          type: 'file',
          accept: {
            extensions: ['txt', 'jpg'],
            mimeTypes: ['text/plain', 'image/jpeg']
          },
          multiple: false,
          showPicker: false // 不显示picker弹窗
        }).then(fileData => {
          this.fileUri = fileData.files[0].uri
        }).catch(err => {
          console.error("File pick error: " + err)
        })
      }).catch(err => {
        console.error("Permission request error: " + err)
      })
  }

  build() {
    Column() {
      Button("Choose File")
        .onClick(() => this.chooseFile())
      Text("Selected File URI: " + this.fileUri)
    }
  }
}

请注意,鸿蒙的文件管理API和iOS有较大差异,且鸿蒙目前主要使用ArkTS(TS扩展)或eTS(JS扩展)进行开发。上述代码假设已配置好文件权限,并尝试在不显示picker的情况下获取文件URI(实际操作中可能需要自定义文件选择器UI)。如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html

回到顶部