HarmonyOS 鸿蒙Next 哪位大神能把下面iOS代码翻译成鸿蒙的,要求不能用picker保存(因为会弹窗,不需要弹窗)。文件管理沙箱我没看明白
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
你上面代码,是将二进制流写入沙箱文件,你可以参考下述代码,核心就是使用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