java - JSP生成文件而不开始空行
问题描述
好吧,我有一个简单的 JSP 文件,我在其中输出了一个 XML/XHTML 文档,以便您可以下载它。
<%
String filename = "FILENAME.<XML/XHTML>";
response.setContentType("APPLICATION/OCTET-STREAM");
response.setHeader("Content-Disposition","attachment; filename=\"" + filename + "\"");
java.io.FileInputStream fileInputStream=new java.io.FileInputStream(FILEPATH);
int i;
while ((i=fileInputStream.read()) != -1) {
out.write(i);
}
fileInputStream.close();
%>
问题是,下载的文件总是有一个空行作为第一行。因为它们是 XML/XHTML 文件,所以它们被标记为无效。如果我删除第一行,则文件有效。
我的问题是,如果有人有更好的解决方案,如何使用 JSP 下载文件或输出没有空第一行的文件?
编辑:https ://imgur.com/a/4PuBdVc也许这有助于更好地理解问题。黄色标记线是错误的。
解决方案
好的,答案很简单。
代替
out.write()
你必须使用 java.io.OutputStream。
response.setContentType("APPLICATION/OCTET-STREAM");
response.setHeader("Content-Disposition", "attachment; filename=\"" + filename + "\"");
java.io.FileInputStream fileInputStream = new java.io.FileInputStream(FILEPATH);
ava.io.OutputStream outStream = response.getOutputStream();
byte[] buffer = new byte[4096];
int bytesRead = -1;
while ((bytesRead = fileInputStream.read(buffer)) != -1) {
outStream.write(buffer, 0, bytesRead);
}
fileInputStream.close();
outStream.flush();
outStream.close();
这对我来说很好。
推荐阅读
- python - ValueError:通过 X 的项目数量错误,位置暗示 Y
- android - 引起:java.lang.IllegalArgumentException:没有注入器工厂绑定到类
- python - tensorfow serving 是否计划支持python api?
- java - FirebaseInstaceId、InstanceIdResult 已弃用
- javascript - 等待异步函数阻塞主线程
- python - browsermob 是否适用于原生 android 应用程序?
- codeigniter-3 - ci中的基本url方法
- sql-server-2012 - 将 SQL Server 2012 Enterprise MDF/NDF 迁移到 SQL Server 2016 Standard
- r - 如何使用极坐标自定义 echarts4r 条形图的颜色?
- sql-server-2016 - 带有 varbinary(max) 的 BCP 实用程序 13.0 错误