当前位置: 首页 > wzjs >正文

杭州企业网站建设 哪里好wordpress主页视频

杭州企业网站建设 哪里好,wordpress主页视频,给大家黄页推广网站,商城app定制01 背景 在后端开发中,通常会有文件下载的需求,常用的解决方案有两种: 不通过后端应用,直接使用nginx直接转发文件地址下载(适用于一些公开的文件,因为这里不需要授权)通过后端进行下载&#…
01 背景

在后端开发中,通常会有文件下载的需求,常用的解决方案有两种:

  1. 不通过后端应用,直接使用nginx直接转发文件地址下载(适用于一些公开的文件,因为这里不需要授权)
  2. 通过后端进行下载,同时进行一些业务处理

本篇主要以方法2进行介绍,方法2的原理步骤如下:

  1. 读取文件,得到文件的字节流
  2. 将字节流写入到响应输出流中
02 一次性读取到内存,通过响应输出流输出到前端
    @GetMapping("/file/download")public void fileDownload(HttpServletResponse response, @RequestParam("filePath") String filePath) {File file = new File(filePath);if (!file.exists()) {throw new BusinessException("当前下载的文件不存在,请检查路径是否正确");}// 将文件写入输入流try (InputStream is = new BufferedInputStream(Files.newInputStream(file.toPath()))) {// 一次性读取到内存中byte[] buffer = new byte[is.available()];int read = is.read(buffer);// 清空 responseresponse.reset();response.setCharacterEncoding("UTF-8");// Content-Disposition的作用:告知浏览器以何种方式显示响应返回的文件,用浏览器打开还是以附件的形式下载到本地保存// attachment表示以附件方式下载   inline表示在线打开   "Content-Disposition: inline; filename=文件名.mp3"// filename表示文件的默认名称,因为网络传输只支持URL编码的相关支付,因此需要将文件名URL编码后进行传输,前端收到后需要反编码才能获取到真正的名称response.addHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(file.getName(), "UTF-8"));// 告知浏览器文件的大小response.addHeader("Content-Length", "" + file.length());OutputStream outputStream = new BufferedOutputStream(response.getOutputStream());response.setContentType("application/octet-stream");outputStream.write(buffer);outputStream.flush();outputStream.close();} catch (IOException e) {throw new RuntimeException(e);}}

适用于小文件,如果文件过大,一次性读取到内存中可能会出现oom的问题

02 将文件流通过循环写入到响应输出流中(推荐)
    @GetMapping("/file/download")public void fileDownload(HttpServletResponse response, @RequestParam("filePath") String filePath) {File file = new File(filePath);if (!file.exists()) {throw new BusinessException("当前下载的文件不存在,请检查路径是否正确");}// 清空 responseresponse.reset();response.setCharacterEncoding("UTF-8");response.addHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(file.getName(), "UTF-8"));response.setContentType("application/octet-stream");// 将文件读到输入流中try (InputStream is = new BufferedInputStream(Files.newInputStream(file.toPath()))) {OutputStream outputStream = new BufferedOutputStream(response.getOutputStream());byte[] buffer = new byte[1024];int len;//从输入流中读取一定数量的字节,并将其存储在缓冲区字节数组中,读到末尾返回-1while((len = is.read(buffer)) > 0){outputStream.write(buffer, 0, len);}outputStream.close();} catch (IOException e) {throw new RuntimeException(e);}}
03 从网络上获取文件并返回给前端
    @GetMapping("/net/download")public void netDownload(HttpServletResponse response, @RequestParam("fileAddress") String fileAddress, @RequestParam("filename") String filename) {try {URL url = new URL(fileAddress);URLConnection conn = url.openConnection();InputStream inputStream = conn.getInputStream();response.reset();response.setContentType(conn.getContentType());response.setHeader("Content-Disposition", "attachment; filename=" + URLEncoder.encode(filename, "UTF-8"));byte[] buffer = new byte[1024];int len;OutputStream outputStream = response.getOutputStream();while ((len = inputStream.read(buffer)) > 0) {outputStream.write(buffer, 0, len);}inputStream.close();} catch (IOException e) {throw new RuntimeException(e);}}
04 从网络上获取文本并下载到本地
    @GetMapping("/netDownloadLocal")public void downloadNet(@RequestParam("netAddress") String netAddress, @RequestParam("filepath") String filepath) {try {URL url = new URL(netAddress);URLConnection conn = url.openConnection();InputStream inputStream = conn.getInputStream();FileOutputStream fileOutputStream = new FileOutputStream(filepath);int byteread;byte[] buffer = new byte[1024];while ((byteread = inputStream.read(buffer)) != -1) {fileOutputStream.write(buffer, 0, byteread);}fileOutputStream.close();} catch (IOException e) {throw new RuntimeException(e);}}
05 总结

一定要搞清楚InputStreamOutputStream的区别,如果搞不清楚的,可以和字符流进行映射,InputStream -> Reader,OutPutStream -> Writer,换成这样你就知道读取内容需要使用Reader,写入需要使用Writer了。

返回给前端的是输出流,不需要你显示的去返回(return response;),这样会报错


文章转载自:

http://mk2hUw4G.xbwqg.cn
http://yxaK3ma0.xbwqg.cn
http://O87s0bgz.xbwqg.cn
http://8t8Ptdx9.xbwqg.cn
http://6SxCO2bX.xbwqg.cn
http://Xk7AHlWu.xbwqg.cn
http://HSX3E8OF.xbwqg.cn
http://WihJCVTV.xbwqg.cn
http://eRSmsweY.xbwqg.cn
http://3fbvD7Zw.xbwqg.cn
http://hRodFdUk.xbwqg.cn
http://CFXyLSnh.xbwqg.cn
http://FF8VjhqZ.xbwqg.cn
http://UP9Bk7bP.xbwqg.cn
http://0YFgyWIf.xbwqg.cn
http://WbVjcPyH.xbwqg.cn
http://GDEvInX8.xbwqg.cn
http://u6MYTLKk.xbwqg.cn
http://XHNiolgt.xbwqg.cn
http://FwrA5KM5.xbwqg.cn
http://5XOM4FQJ.xbwqg.cn
http://LX928iVM.xbwqg.cn
http://CDCP6klA.xbwqg.cn
http://fv8VSbbX.xbwqg.cn
http://ck3pJsck.xbwqg.cn
http://F7poXocl.xbwqg.cn
http://zg9PWiiw.xbwqg.cn
http://omgbaEqy.xbwqg.cn
http://Y7kb3HRh.xbwqg.cn
http://QEQqdI9v.xbwqg.cn
http://www.dtcms.com/wzjs/614163.html

相关文章:

  • 做空包网站手机怎么打开微信网站
  • 收录快的门户网站游戏开发网站开发
  • 微网站 文章wordpress slide插件
  • 免费制图网站网站设计 成都
  • 商丘做网站sqlongliqi淮安网站设计
  • 域名解析好了怎么做网站公司宣传册设计样本免费
  • 中山网站优化南召网站建设
  • 网站中点击链接怎么做的拼多多女装关键词排名
  • 网站工作有哪些内容有赞微商城app官方下载
  • 西安外包公司排行优化营商环境调度
  • 网站 视觉冲击水果建设网站前的市场分析
  • 哈尔滨网页网站制作装修公司谁做网站
  • 网站建设重庆公司企业vi是什么
  • 罗湖网站设计论文答辩免费ppt模板下载
  • 如何将网站挂载域名如何运营好一个网站
  • 网站开发软件 论文 摘要godaddy中文网站开发
  • 公司网站宣传设计国外设交网站开发客户的重要性
  • 社交网站建设流程seo的形式有哪些
  • 广东品牌网站建设服务机构cps广告是什么意思
  • 深圳 企业 网站建设哪家好网站建设需要多少人员
  • 企业网站建设免费进口跨境电商网站制作
  • 观澜做网站佛山企业网站建设咨询
  • 用python做购物网站庆阳西峰
  • 聊城门户网站wordpress不同用户不同菜单
  • dz论坛网站源码适合公司建设的网站
  • 合肥网站制作哪家强摄影网站设计代码
  • 盗版小说网站建设河北seo网站优化报价
  • 番禺网站建设哪里有企业网站用什么做
  • 青年人爱看的网站抖音运营
  • 设计网站收费怎样自己制作广告图片