Arkts 文件下载并保存文件到本地

556 阅读1分钟

服务器端

@GetMapping("/download")
public void download(@RequestParam String fileName, HttpServletResponse response){
    try{
        System.out.println("file download start.................................");
        FileInputStream fileInputStream=new FileInputStream("D://"+fileName);
        BufferedInputStream bufferedInputStream=new BufferedInputStream(fileInputStream);
        OutputStream os = response.getOutputStream();
        byte[] bytes = new byte[bufferedInputStream.available()];
        bufferedInputStream.read(bytes);
        response.reset();
        response.setContentType("application/octet-stream");
        response.setHeader("Content-disposition", "attachment;filename=" + URLEncoder.encode(fileName, "UTF-8"));  // 注意,这里要设置文件名的编码,否则中文的文件名下载后不显示
        // 写出字节数组到输出流
        os.write(bytes);
        // 刷新输出流
        os.flush();

    }catch (Exception e){
        e.printStackTrace();
    }
}

放置一个文件在本地D盘

image.png

打开deveco编写arkts代码

目录架构

image.png

http请求代码

import { http } from '@kit.NetworkKit'
import { BusinessError, request } from '@kit.BasicServicesKit';

export const download  = async () =>{

  let downloadTask: request.DownloadTask;
  try {
    request.downloadFile(getContext(), {
      url: 'http://192.168.110.1:8080/download?fileName=1.mp4',
      filePath: '1.mp4'
    }, (err: BusinessError, data: request.DownloadTask) => {
      if (err) {
        console.error(`Failed to request the download. Code: ${err.code}, message: ${err.message}`);
        return ;
      }
      downloadTask = data;
    });
  } catch (err) {
    console.error(`Failed to request the download. err: ${JSON.stringify(err)}`);
  }

}

Index.ets进行测试

import { download } from '../common/http'


@Entry
@Component
struct Index {
  async onPageShow(): Promise<void> {
    await download()

  }
  build() {
    Column(){

    }
      .width('100%')
      .height('100%')
  }
}

测试成功文件保存在沙箱路径之中

image.png