- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用 Struts2 框架在 Java 中开发文件上传/下载功能,我们在其中上传到远程服务器路径并从远程服务器路径下载。当我使用本地路径检查本地计算机上的功能时,一切似乎都工作正常,本地路径是我下载和上传任何格式文件的目的地路径。开发环境有JBoss服务器。但是当我在产品环境中运行相同的程序时,应用程序部署在 Weblogic 服务器中,.txt、.csv、.html 文件(基本上是文本格式文件)将我的 jsp 源代码附加到文件内容。以下是我用于下载的代码:
BufferedOutputStream bout=null;
FileInputStream inStream = null;
byte[] buffer = null;
try {
inStream = new FileInputStream(path+File.separator+filename);
buffer = new byte[8192];
String extension = "";
int pos = filename.lastIndexOf(".");
if (pos > 0)
extension = filename.substring(pos+1);
int bytesRead = 0, bytesBuffered = 0;
response.setContentType("application/octet-stream");
response.setHeader("content-disposition", "attachment; filename="+ filename);
bout = new BufferedOutputStream(response.getOutputStream());
while((bytesRead = fistrm.read(buffer)) > -1){
bout.write(buffer, 0, bytesRead);
bytesBuffered += bytesRead;
if(bytesBuffered > 1048576){
bytesBuffered = 0;
bout.flush();
}
}
} catch (IOException e) {
log.error(Logger.getStackTrace(e));
} finally {
if(bout!=null){
bout.flush();
bout.close();
}
if(inStream!=null)
inStream.close();
}
我曾尝试针对扩展使用不同的响应内容类型,但没有任何帮助。看起来输出流甚至在从输入流写入之前就已经包含了 jsp 源代码。
谁能提出解决方案并解释为什么会这样?
最佳答案
这是因为您直接在输出流中写入,然后返回一个 struts 结果,即您的 JSP。您正在使用一个 Action ,就好像它是一个 servlet,但事实并非如此。
在 Struts2 中,要实现您的目标,您需要使用 Stream result 键入,如以下答案中所述:
否则,如果您想绕过框架机制并自己手动写入 outputStream(在极少数情况下它很有用,like downloading dynamically created ZIP),那么您必须返回 NONE
result .
Returning
ActionSupport.NONE
(or null) from an Action class method causes the results processing to be skipped. This is useful if the action fully handles the result processing such as writing directly to the HttpServletResponse OutputStream.
但我强烈建议您使用 Stream 结果,这是标准方式。
关于java - 下载文件时获取附加文件内容的jsp源代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30240284/
我是一名优秀的程序员,十分优秀!