HarmonyOS 鸿蒙Next downloadFile 下载路径问题
HarmonyOS 鸿蒙Next downloadFile 下载路径问题 request.downloadFile下载的路径,可以直接传 DocumentViewPicker.picker拿到的路径吗?
2 回复
request.downloadFile 没法直接用拿到的路径,权限不够,可以先下载到沙箱,然后再用沙箱保存到公共目录
import { fileIo, fileUri, picker } from '@kit.CoreFileKit';
import { BusinessError, request } from '@kit.BasicServicesKit';
import { common } from '@kit.AbilityKit';
let context = getContext() as common.UIAbilityContext;
let filePath: string = context.filesDir + '/test.jpeg';
@Entry
@Component
struct DownLoadPage {
@State message: string = 'Hello World';
build() {
Column() {
Button('下载').onClick(() => {
let documentOptions = new picker.DocumentSaveOptions()
documentOptions.pickerMode = picker.DocumentPickerMode.DOWNLOAD
let documentPicker = new picker.DocumentViewPicker()
documentPicker.save(documentOptions,(err: BusinessError,DocumentSaveResult:Array<string>) => {
request.downloadFile(context, {
url: 'https://image.baidu.com/search/down?tn=download&word=download&ie=utf8&fr=detail&url=http%3A%2F%2Fpic1.win4000.com%2Fwallpaper%2F2019-11-22%2F5dd7afa7df0fc.jpg&thumburl=https%3A%2F%2Fimg1.baidu.com%2Fit%2Fu%3D2205810988%2C4283060315%26fm%3D253%26fmt%3Dauto%26app%3D138%26f%3DJPEG%3Fw%3D800%26h%3D500',
filePath: filePath
}, (err: BusinessError, data: request.DownloadTask) => {
if (err) {
console.error(`Failed to request the download. Code: ${err.code}, message: ${err.message}`);
return;
}
let downloadTask: request.DownloadTask = data;
downloadTask.on('complete', () => {
console.log('complete')
let file = fileIo.openSync(filePath, fileIo.OpenMode.READ_WRITE | fileIo.OpenMode.CREATE);
let path: string = new fileUri.FileUri(DocumentSaveResult[0]).path
let file2 = fileIo.openSync(path + '/' + file.name, fileIo.OpenMode.READ_WRITE | fileIo.OpenMode.CREATE)
fileIo.copyFileSync(file.fd, file2.fd)
fileIo.closeSync(file2);
fileIo.closeSync(file);
console.log('保存成功')
});
downloadTask.on('fail', (err: number) => {
console.error(`Failed to download the task. Code: ${err}`);
});
});
})
})
}
.height('100%')
.width('100%')
}
}
更多关于HarmonyOS 鸿蒙Next downloadFile 下载路径问题的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
在HarmonyOS(鸿蒙Next)中,downloadFile
API用于下载文件到指定路径。路径问题主要涉及如何指定文件保存的位置。鸿蒙系统提供了应用沙箱机制,文件存储分为内部存储和外部存储。内部存储路径通常为/data/data/包名/
,外部存储路径为/storage/emulated/0/
。
使用downloadFile
时,可以通过filePath
参数指定文件保存路径。若不指定路径,默认保存到应用的缓存目录。例如:
downloadFile({
url: 'https://example.com/file.zip',
filePath: '/data/data/com.example.app/files/file.zip',
success: function(res) {
console.log('文件下载成功');
},
fail: function(err) {
console.log('文件下载失败');
}
});
需要注意权限问题,访问外部存储需要申请ohos.permission.WRITE_USER_STORAGE
权限。路径问题还涉及文件系统的访问控制,确保路径在应用沙箱范围内,避免越权访问。