服务器端
@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盘
打开deveco编写arkts代码
目录架构
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%')
}
}