文件输入输出流的使用,后端返回给前端文件流的形式,由前端实现文件的下载。文件的下载(网络文件,本地文件)
发布日期:2021-06-29 12:04:24 浏览次数:2 分类:技术文章

本文共 1962 字,大约阅读时间需要 6 分钟。

后端需要对文件进行操作的时候用到了FileInputStream和FileOutputStream两个类

使用多态创建输入输出流对象:

InputStream docIn = new FileInputStream(new File("C:\\Users\\admin\\xxx.pdf"));//如果输出的方式是下载到本地指定目录,OutputStream out = new FileOutputStream(new File("C:\\Users\\admin\\xxx.pdf"));//如果输出方式是写入临时文件File file = File.createTempFile("ppp", ".pdf");OutputStream out = new FileOutputStream(file);//下载到本地的方式对out对象进行操作即可//如果是临时文件,out对象操作完再对file对象操作即可(上传oss等)

如果是需要返回给前端文件流的形式,然后前端来实现文件的下载使用如下方式:

这里需要注意的点是:接口无返回类型void

@PostMapping("/downFile")    @Transactional(rollbackFor = Exception.class)    @ApiOperation(value = "下载文件", notes = "下载文件", produces = "application/json")    public void  downFile(@RequestBody DownloadFileRequest request) throws MalformedURLException {
// 下载网络文件 int byteread = 0; URL url = new URL(request.getUrl()); try {
HttpServletResponse response = HttpContextUtil.getHttpServletResponse(); //创建url连接对象 URLConnection conn = url.openConnection(); //创建输入流对象 InputStream inStream = conn.getInputStream(); //设置超时时间 conn.setConnectTimeout(3 * 1000); // 防止屏蔽程序抓取而返回403错误// conn.setRequestProperty("User-Agent", "Mozilla/4.0 (compatible; MSIE 5.0; Windows NT; DigExt)"); // 下载本地的文件放开// FileOutputStream fs = new FileOutputStream("c:/xxx.pdf"); // 设置response的Header response.addHeader("Content-Disposition", "attachment;filename=" + new String("文件名".getBytes())); response.setContentType("application/octet-stream"); byte[] buffer = new byte[1204]; int length; while ((byteread = inStream.read(buffer)) != -1) {
//本地下载放开 //fs.write(buffer, 0, byteread); //写入输出流 response.getOutputStream().write(buffer, 0, byteread); } } catch (IOException e) {
e.printStackTrace(); } }

转载地址:https://blog.csdn.net/zzztimes/article/details/116492445 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:stream.mapToInt.boxd()方法解释、IntStream/Stream区别
下一篇:swagger文档无法测试下载文件的接口解决方式

发表评论

最新留言

初次前来,多多关照!
[***.217.46.12]2024年04月14日 13时00分51秒