HarmonyOS鸿蒙Next中视频文件拿到地址后如何在沙箱中下载

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

HarmonyOS鸿蒙Next中视频文件拿到地址后如何在沙箱中下载 视频文件如何下载 沙箱中

3 回复

看看下面的例子:

import common from '@ohos.app.ability.common';
import request from '@ohos.request';
import { BusinessError } from '@ohos.base';
import fs from '@ohos.file.fs';
import { buffer } from '@kit.ArkTS';

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

@Entry
@Component
struct Page69 {
  build() {
    Column(){
      Button('下载')
        .onClick(() =>{
          this.down()
        })
    }
  }

  down(){
    try {
      let time:string = Date.now().toString()
      let fileName:string = '/dist_' + time +'.mp4'
      request.downloadFile(context, {
        url: 'http://vjs.zencdn.net/v/oceans.mp4',
        filePath: filesDir + fileName //图片下载保存的位置
      }).then((downloadTask: request.DownloadTask) => {
        downloadTask.on('complete', () => {
          console.info('download complete');
          let file = fs.openSync(filesDir + fileName, fs.OpenMode.READ_WRITE);
          let arrayBuffer = new ArrayBuffer(4096);
          let readLen = fs.readSync(file.fd, arrayBuffer);
          let buf = buffer.from(arrayBuffer, 0, readLen);
          console.info(`The content of file: ${buf.toString()}`);
          fs.closeSync(file);
        })

        let progressCallback = (receivedSize: number, totalSize: number) => {
          console.info("download 已经下载大小:" + receivedSize + " 文件总大小:" + totalSize);
          if(receivedSize==totalSize){
            console.log("download 文件下载成功")
          }
        };
        downloadTask.on('progress', progressCallback);

        let failCallback = (err: number) => {
          console.error(`download Failed to download the task. Code: ${err}`);
        };
        downloadTask.on('fail', failCallback);
      }).catch((err: BusinessError) => {
        console.error(`Invoke downloadTask failed, code is ${err.code}, message is ${err.message}`);
      });
    } catch (error) {
      let err: BusinessError = error as BusinessError;
      console.error(`Invoke downloadFile failed, code is ${err.code}, message is ${err.message}`);
    }
  }
}

更多关于HarmonyOS鸿蒙Next中视频文件拿到地址后如何在沙箱中下载的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS鸿蒙Next中,视频文件拿到地址后,可以通过FileHttp模块在沙箱中下载。首先,使用Http模块发起网络请求,获取视频文件的输入流。然后,使用File模块创建文件输出流,将输入流写入沙箱中的指定路径。具体步骤如下:

  1. 发起网络请求:使用Http.createHttp().request方法发起GET请求,获取视频文件的输入流。
  2. 创建文件输出流:使用fileIO.open方法在沙箱中创建文件输出流。
  3. 写入文件:将输入流的数据写入文件输出流。
  4. 关闭流:完成写入后,关闭输入流和输出流。

代码示例:

import http from '@ohos.net.http';
import fileIO from '@ohos.fileio';

let httpRequest = http.createHttp();
let filePath = '/data/storage/el2/base/files/video.mp4';

httpRequest.request('https://example.com/video.mp4', {
  method: http.RequestMethod.GET,
}, (err, data) => {
  if (err) {
    console.error('Download failed:', err);
    return;
  }

  let file = fileIO.open(filePath, fileIO.OpenMode.CREATE | fileIO.OpenMode.WRITE);
  fileIO.write(file.fd, data.result as ArrayBuffer);
  fileIO.close(file.fd);
  console.log('Download complete:', filePath);
});

在HarmonyOS鸿蒙Next中,若已获取视频文件地址并需在沙箱中下载,可按以下步骤操作:

  1. 创建下载任务:使用Download类创建下载任务,设置URL和下载路径。
  2. 配置沙箱路径:指定下载路径为沙箱内的目录,如context.getFilesDir()context.getCacheDir()
  3. 启动下载:调用start方法开始下载,并监听下载进度和状态。
  4. 处理下载结果:下载完成后,在沙箱中访问并使用视频文件。

示例代码:

DownloadConfig config = new DownloadConfig.Builder(context)
    .setUrl(videoUrl)
    .setPath(context.getFilesDir().getPath() + "/video.mp4")
    .build();
DownloadTask task = new DownloadTask(config);
task.start();

确保权限和路径正确,文件将安全存储在沙箱中。

回到顶部
AI 助手
你好,我是IT营的 AI 助手
您可以尝试点击下方的快捷入口开启体验!