JSP生成文件而不启动空行

时间:2018-06-06 21:46:45

标签: java xml jsp download

我有一个简单的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这可能有助于更好地理解问题。黄色标记的行是错误的。

1 个答案:

答案 0 :(得分:0)

好的答案很简单。

而不是

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();

这对我来说很好。