使用ArkWeb下载文件时,下载代理提示已下载完成,并且有实际下载内容,但是保存文件时空。代码如下:
//首先注册一个下载代理
this.delegate.onBeforeDownload((webDownloadItem: web_webview.WebDownloadItem) => {
console.log("EntryAbility: will start a download.");
//然后唤起系统文件框
const documentSaveOptions = new picker.DocumentSaveOptions(); // 创建文件管理器选项实例
documentSaveOptions.newFileNames =
["摩羯星GPS轨迹导出_" + (new Date()).getTime() + ".txt"]; // 保存文件名(可选)
documentSaveOptions.fileSuffixChoices = ['.txt']; // 保存文件类型(可选)
let uris: Array<string> = [];
let documentViewPicker = new picker.DocumentViewPicker(); // 创建文件选择器实例
documentViewPicker.save(documentSaveOptions).then((documentSaveResult: Array<string>) => {
uris = documentSaveResult;
// 传入一个下载路径,并开始下载。
// 如果传入一个不存在的路径,则会下载到默认/data/storage/el2/base/cache/web/目录。
//webDownloadItem.start("/data/storage/el2/base/cache/web/" + webDownloadItem.getSuggestedFileName());
//保存到文件框提示的下载位置
webDownloadItem.start(uris.toString());
}).catch((err: BusinessError) => {
console.error(`EntryAbility: Invoke documentViewPicker.save failed, code is ${err.code}, message is ${err.message}`);
})
})
请参考以下demo: