账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    springboot 实现下载文件出现文件受损无法打开
    20
    0
    问题描述今天在做使用模板导出pdf的过程中遇到了模板导出成功但是下载的pdf无法打开,并且文件大小还变小了尝试的解决方案搜索了一些解决方案,有的说是springboot resource 文件夹下的模板文件被自动压缩,直接下载就会失败参考按照它的方式将 模板文件放行,也同样会出现文件受损无法打开 <plugin> <groupId>org.apache.maven.plugins</groupId> <version>2.6</version> <artifactId>maven-resources-plugin</artifactId> <configuration> <encoding>UTF-8</encoding> <nonFilteredFileExtensions> <nonFilteredFileExtension>jasper</nonFilteredFileExtension> <nonFilteredFileExtension>pdf</nonFilteredFileExtension> <nonFilteredFileExtension>xls</nonFilteredFileExtension> </nonFilteredFileExtensions> </configuration> </plugin>相关代码通过网络 下载代码 : @RequestMapping(value = "/paperManagement/fileDownload/paperCover", method = RequestMethod.GET) public void paperCoverDownLoad(HttpServletRequest request, HttpServletResponse response) { String jwt = request.getHeader("jwt"); List<PaperCoverTemplate> result = fileDownLoadService.packPaperCoverData(1); Major major = majorService.getById(1); String fileName = DateUtil.year(new Date()) + "_DADFP_" + major.getCode() + ".pdf"; ClassPathResource classPathResource = new ClassPathResource("template/pdf/PaperCover.jasper"); InputStream source = null; ServletOutputStream target = null; try { target = response.getOutputStream(); source = classPathResource.getInputStream(); /*填充报表并转换到outPutStream流中*/ response.setContentLength(source.available()); response.setContentType("application/octet-stream"); response.addHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(fileName, "UTF-8")); JasperRunManager.runReportToPdfStream(source, target, new HashMap<>(16), new JRBeanCollectionDataSource(result)); } catch (IOException | JRException e) { e.printStackTrace(); throw new GlobalException(ResultCodeEnum.FAILED.getCode(), "论文封皮下载失败"); } finally { try { if (source != null) { source.close(); } } catch (IOException e) { e.printStackTrace(); } } }文件大小变小了无法正常打开直接在本地下载 @Test public void test1() { try { Map<String, Object> parameters = new HashMap<>(16); FileInputStream source = new FileInputStream("D:\\bylw\\src\\main\\resources\\template\\pdf\\PaperCover.jasper"); List<PaperCoverTemplate> result = fileDownLoadService.packPaperCoverData(1); JRBeanCollectionDataSource beanDataSource = new JRBeanCollectionDataSource(result); File file = new File("C:\\Users\\x1522\\Desktop\\shape\\t.pdf"); if (!file.exists()) { file.createNewFile(); } FileOutputStream target = new FileOutputStream(file); JasperRunManager.runReportToPdfStream(source, target, parameters, beanDataSource); } catch (FileNotFoundException | JRException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } }能够正常打开请问为啥下载的文件被压缩了,正常在本地下载为42kb, 但是通过网络下载就变成了 24kb,同样的下载方法在本地,在本地下载的文件比通过网络的大,这是为啥,请帮我解答一下,还有一般下载后文件受损的无法打开的原因有那些?
    0
    打赏
    收藏
    点击回答
        全部回答
    • 0
    更多回答
    扫一扫访问手机版

    回答动态

    酒后略带风情:发布了悬赏问题Android内存中Graphics与Code占用过高预计能赚取 10积分收益
    扛起拖把扫天下:发布了悬赏问题typescript如何导出接口配置?求解,谢谢!预计能赚取 10积分收益
    发布了悬赏问题Vue 如何改变返回页面的路径?如让B页面只能返回到A页面.预计能赚取 11积分收益
    发布了悬赏问题vue H5移动端;底部bottom固定定位,安卓弹起键盘导致页面变形如何解决?预计能赚取 10积分收益
    发布了悬赏问题请问为什么tomcat8.5 GET请求中文正常,POST请求还需要设置UTF-8.预计能赚取 10积分收益
    发布了悬赏问题vue2.5+ts创建以及引入jq的方法预计能赚取 11积分收益
    情场浪女:发布了悬赏问题import ggplot时报错module 'pandas' has no attribute 'tslib'预计能赚取 10积分收益
    见心书画许老师18753375161:发布了悬赏问题echarts3 legend禁止点击事件,允许悬浮事件预计能赚取 11积分收益
    aa_92cb0bd09f:发布了悬赏问题codewar上的一个问题预计能赚取 11积分收益
    低谷有雾:发布了悬赏问题定时执行爬虫任务,通过循环监视,但是没有成功,求解答预计能赚取 11积分收益