文件下载,通过也是可以的,但是这样直接下载,一般文件名就是服务器端的没有任何意义的文件名。

今天自己用到了另外一种,先说需求:1.文件服务器与系统没有在同一服务器,所以需要使用网络地址来进行下载;

2.上传时为了避免文件重名,使用uuid来生成了文件名,真实的文件名存与数据库中;

3.所有的文件都只能下载,不可直接在浏览器上打开。

根据代码来分析:这里使用的springmvc

@RequestMapping("/download")

public String downloadAmachment(String downloadUrl, String realFileName, HttpServletRequest request,

HttpServletResponse response) {

response.setContentType("text/html;charset=UTF-8");

try {

request.setCharacterEncoding("UTF-8");

BufferedInputStream bis = null;

BufferedOutputStream bos = null;

//此处使用的配置文件里面取出的文件服务器地址,拼凑成完整的文件服务器上的文件路径

//写demo时,可以直接写成http://xxx/xx/xx.txt.这种形式

String downLoadPath = ConfigHelper.getString("img.server.url") + downloadUrl;

response.setContentType("application/octet-stream");

response.reset();//清除response中的缓存

//根据网络文件地址创建URL

URL url = new URL(downLoadPath);

//获取此路径的连接

URLConnection conn = url.openConnection();

Long fileLength = conn.getContentLengthLong();//获取文件大小

//设置reponse响应头,真实文件名重命名,就是在这里设置,设置编码

response.setHeader("Content-disposition",

"attachment; filename=" + new String(realFileName.getBytes("utf-8"), "ISO8859-1"));

response.setHeader("Content-Length", String.valueOf(fileLength));

bis = new BufferedInputStream(conn.getInputStream());//构造读取流

bos = new BufferedOutputStream(response.getOutputStream());//构造输出流

byte[] buff = new byte[1024];

int bytesRead;

//每次读取缓存大小的流,写到输出流

while (-1 != (bytesRead = bis.read(buff, 0, buff.length))) {

bos.write(buff, 0, bytesRead);

}

response.flushBuffer();//将所有的读取的流返回给客户端

bis.close();

bos.close();

} catch (IOException e) {

LOG.error(e.getMessage(), e);

return ErrorPages._500;

}

return null;

}

前台页面可以用一个这里的xxxxx为文件的网络地址,yyy为文件的真实具有意义的文件名。

这种做法,主要是针对不同服务器上,不能直接通过磁盘盘符例如:D:/xx/xx.txt这种形式来构建File来进行下载。同时,生产系统,文件服务器万一更改了,到时候还需要直接修改代码,维护性不高;同时解决文件下载下来,得到的是有具体意义的文件名。

java修改网络上的文件_java下载网络文件并重命名相关推荐

  1. java下载网络文件_java下载网络文件的方法有哪些

    下载网络文件的方法有:字节流下载 apache的FileUtils工具包下载 NIO下载 实现代码如下:package com.dsp.rpc.metricelf; import org.apache ...

  2. java压缩包加密上传,解密下载

    java压缩包加密上传,解密下载 业务场景 供应商上传投标文件需要进行加密处理,通过链接下载时下载的时加密的文件,而通过系统内访问接口下载时,下载的是解密好的文件. 问题解决思路 1. 首先配置三个保 ...

  3. Linux命令行下载大文件,下载Onedrive文件

    Linux命令行下载大文件,下载Onedrive文件 做深度学习实验时,经常会遇到下载数据集,下载到本地又上传到Linux服务器上,这时用rz上传会很慢,在网上找到一些方法,用curl下载One-dr ...

  4. 报表XML导出rtf格式,结果在浏览器中打开XML文件。下载rtf文件打开后出现Authentication failed 问题

    报表XML导出rtf格式,结果在浏览器中打开XML文件.下载rtf文件打开后出现Authentication failed 问题 直接上问题图: 问题描述:在Oracle EBS中执行"资源 ...

  5. 文件流下载ppt文件无法打开或文件已损坏

    在项目中遇到"文件流下载ppt文件无法打开或文件已损坏"这种情况,我也是查阅资料来一个排查问题的汇总 1.要设置responseType,在接口传参的时候传参过去 2.注意接口返回 ...

  6. java批量上传文件_Java 批量大文件上传下载

    第一点:Java代码实现文件上传 FormFile file = manform.getFile(); String newfileName = null; String newpathname =  ...

  7. java 批量写入文件_Java批量写入文件和下载图片的示例代码

    很久没有在WhitMe上写日记了,因为觉着在App上写私密日记的话肯定是不安全的,但是想把日记存下来.,然后看到有导出日记的功能,就把日记导出了(还好可以直接导出,不然就麻烦点).导出的是一个html ...

  8. java 导出excel打开报错_java导出excel文件报“失败-网络错误”

    问题描述 用IP访问单个服务器去下载excel文件正常,访问F5去下载的时候报"失败-网络错误" 项目截图(必填) 运行截图(必填) 相关代码片段 response.reset() ...

  9. java file 下载文件_java下载文件的几种方式

    public HttpServletResponse download(String path, HttpServletResponse response) { try { // path是指欲下载的 ...

最新文章

  1. ICML2020 | G2Gs:不依赖模板的的逆合成预测新框架
  2. vue中使用promise
  3. 【PP操作手册】计划订单转生产订单
  4. HDFS重复上传文件将会覆盖原文件
  5. 为什么Android Geeks购买Nexus设备
  6. SVD++:推荐系统的基于矩阵分解的协同过滤算法的提高
  7. Oracle IMP数据时报20001错误
  8. 简用计算机,你真的会使用“计算器”吗?
  9. vba odbc 3704 mysql_[求助]ado对象调用存储过程运行时错误3704
  10. swift 将图片资源打包成Bundle
  11. chrome插件开发入门-保姆级攻略
  12. 从零开始一个cli脚手架并发布到NPM(上篇)
  13. windows资源监视器
  14. TFIDF之python实现
  15. PS制作水彩效果头像
  16. 计算机求和怎样操作,电脑求和怎么操作
  17. 51单片机小白零基础教程——独立键盘检测原理以及实际应用
  18. 简述观察法的优缺点_各种观察法的优缺点
  19. 均方误差损失函数(MSE,mean squared error)
  20. Java 获取本机局域网内IP

热门文章

  1. BullseyeCoverage代码覆盖率工具介绍
  2. Get一个小技巧——我猜你应该不知道
  3. 2021年JAVA 精心整理的常见面试题-附详细答案【持续更新~~】
  4. 数据库管理 trove openstack
  5. 关于系统重装的一些有用建议
  6. 平面设计出来可以干什么
  7. 【币圈心得】套单、交易框架
  8. 伤仲永?一个高中生的自学编程经历。看完能少走很多弯路!
  9. idea配置docker
  10. 虚拟机vm_state状态