HarmonyOS 鸿蒙Next:保存线上PDF至文件管理download目录后无法查看问题 HarmonyOS 鸿蒙Next:首次保存线上PDF至download目录可查看,多次保存后文档无法打开,WPS提示格式错误或内容损坏
HarmonyOS 鸿蒙Next:保存线上PDF至文件管理download目录后无法查看问题
HarmonyOS 鸿蒙Next:首次保存线上PDF至download目录可查看,多次保存后文档无法打开,WPS提示格式错误或内容损坏
import { fileIo, fileUri, picker } from '@kit.CoreFileKit';
import { BusinessError, request } from '@kit.BasicServicesKit';
import { promptAction } from '@kit.ArkUI';
import { webview } from '@kit.ArkWeb';
import { JSON } from '@kit.ArkTS';
@Entry
@Component
struct indexPage {
webContorller: WebviewController = new webview.WebviewController()
fileSrc = "https://www.gov.cn/zhengce/pdfFile/2023_PDF.pdf"
build() {
Column({ space: 10 }) {
Scroll() {
Web({ src: this.fileSrc, controller: this.webContorller })
.domStorageAccess(true)
}.layoutWeight(1)
Button('保存到本机目录').onClick(() => {
let fileAddr = this.fileSrc.split('//')[1]
let fileName = fileAddr.split('/')[fileAddr.split('/').length - 1]
if (fileIo.accessSync(getContext(this).cacheDir + '/' + fileName)) {
fileIo.unlinkSync(getContext(this).cacheDir + '/' + fileName)
}
// 文件下载到应用沙箱
request.downloadFile(getContext(this),
{ url: this.fileSrc, filePath: getContext(this).cacheDir + '/' + fileName }, (err, res) => {
res.on('fail', (reject) => {
console.log('文件下载 下载失败 --' + reject)
})
res.on('progress', (resolve) => {
console.log('文件下载 下载成功 --' + resolve)
})
})
let documentOptions = new picker.DocumentSaveOptions()
documentOptions.pickerMode = picker.DocumentPickerMode.DOWNLOAD
let documentPicker = new picker.DocumentViewPicker()
try {
documentPicker.save(documentOptions, (err: BusinessError, DocumentSaveResult: Array<string>) => {
DocumentSaveResult.forEach(uri => {
console.log('文件下载 uri ' + JSON.stringify(uri))
let file = fileIo.openSync(getContext(this).cacheDir + '/' + fileName,
fileIo.OpenMode.READ_WRITE | fileIo.OpenMode.CREATE);
console.log('文件下载 file地址 ---' + getContext(this).cacheDir + '/' + fileName)
let path: string = new fileUri.FileUri(uri).path
if (fileIo.accessSync(path + '/' + file.name)) {
fileIo.unlinkSync(path + '/' + file.name)
}
console.log('文件下载 file2地址--- ' + path + '/' + file.name)
let file2 = fileIo.openSync(path + '/' + file.name, fileIo.OpenMode.READ_WRITE | fileIo.OpenMode.CREATE)
console.log('文件下载 文件管理存在' + fileIo.accessSync(path + '/' + file.name))
fileIo.copyFileSync(file.fd, file2.fd)
fileIo.closeSync(file2);
fileIo.closeSync(file);
promptAction.showToast({
message: '保存成功'
})
})
})
} catch (err) {
console.log('文件下载 报错 ' + JSON.stringify(err))
}
})
}
.width('100%')
.height('100%')
}
}
更多关于HarmonyOS 鸿蒙Next:保存线上PDF至文件管理download目录后无法查看问题 HarmonyOS 鸿蒙Next:首次保存线上PDF至download目录可查看,多次保存后文档无法打开,WPS提示格式错误或内容损坏的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
我们用最新版本测了下,没复现出来,你的rom和ide具体版本号多少
更多关于HarmonyOS 鸿蒙Next:保存线上PDF至文件管理download目录后无法查看问题 HarmonyOS 鸿蒙Next:首次保存线上PDF至download目录可查看,多次保存后文档无法打开,WPS提示格式错误或内容损坏的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
DevEco Studio 5.0.0 Release
Build #DS-233.14475.28.36.503910
构建版本:5.0.3.910, built on November 1, 2024
Runtime version: 17.0.12+1-b1087.25 amd64
VM: OpenJDK 64-Bit Server VM by JetBrains s.r.o.
Windows 11.0
GC: G1 Young Generation, G1 Old Generation
Memory: 4052M
Cores: 8
Registry:
idea.plugins.compatible.build=IC-233.14475.28
HarmonyOS 5.0.0 Release SDK,基于OpenHarmony SDK Ohos_sdk_public 5.0.0.71 (API Version 12 Release),
排查下,保存文件前后文件大小是不是一致的吧,
感谢指导; 已解决, 文件下载应该写在 request.downloadFile
的onProgress中; 就是因为文件没下载完, 才会保存失败;
那就奇怪了;我这边环境是新装的, ide也是新下载的;sdk 12的;
我试了很多次,只有中间不开debug的时候触发了两次,之后怎么也复现不了了
你那边是偶现问题还是多次复现呢?
昨天五次能有三次保存失败; 今天十次中有一次失败; 大概的几率, 并不是固定的,
针对“HarmonyOS 鸿蒙Next:保存线上PDF至文件管理download目录后无法查看问题”,可能的原因及解决方案如下:
-
文件写入权限问题:首次保存时,系统可能已授予写入权限。多次保存后,若权限被回收或更改,可能导致文件写入不完整。请检查应用是否有持续的写入权限。
-
文件路径或命名冲突:多次保存时,如果文件名未改变,可能导致新文件覆盖旧文件但写入未完成,造成文件损坏。尝试更改文件名或使用时间戳生成唯一文件名。
-
PDF文件损坏:线上PDF文件可能在传输过程中损坏,或源文件本身存在问题。检查源文件是否能在其他设备上正常打开。
-
WPS软件兼容性问题:WPS可能无法兼容某些特定格式的PDF文件,或对新版本的PDF特性支持不足。尝试使用其他PDF阅读器打开文件。
-
系统缓存问题:系统缓存可能导致文件读取异常。尝试清理系统缓存或重启设备后查看。
如果问题依旧没法解决请联系官网客服,官网地址是 https://www.itying.com/category-93-b0.html,