前言
我这个错误主要是第三方接口调用我的下载文件接口出现的, 如果不是和文件下载相关, 可忽略
事情发生在和第三方设备对接上, 功能大概是: 给设备下发消息, 设备来我的平台下载文件, 中间的通讯那个公司自己封装了一个 jar包, 启动 jar包之后我只要调用接口就行了
这个功能是年初二月份写完的, 当时测试也没有问题, 但是因为他们硬件的问题换了一个样品进行测试的时候发现这个功能就不好用了, 于是进行了问题排查, 本篇文章主要是记录问题和解决
实名不喜欢对接第三方设备, 但是公司有需要没得办法
文中所出现的代码都是超精简过的, 主打的就是一个通俗易懂
总结写前面
这篇文章知识点总结还是要写前面的, 直接省时好吧
对于response的操作
- 下载文件:
java复制代码// 指定文件下载名
response.addHeader("Content-Disposition", "attachment;filename=" + fileName);
// 指定长度, 推荐file.length()方法, inputStream.available()方法获取网络流不一定准确
//response.setHeader("Content-Length", String.valueOf(inputStream.available()));
response.setHeader("Content-Length", String.valueOf(file.length()));
- 在线预览
java复制代码// 指定播放格式, 代码中为 mp3播放
response.setContentType("audio/mp3");
- conn.getContentLength() == -1
java复制代码// 可以尝试下述代码, 理由: 2.2版本以上HttpURLConnection跟服务交互采用了"gzip"压缩
conn.setRequestProperty("Accept-Encoding", "identity");
第一版代码
java复制代码 File file = new File(filePath);
InputStream inputStream = new FileInputStream(file);
try {
IOUtils.copy(inputStream, response.getOutputStream());
} catch (Exception e) {