"
我是这么在request里取得值:
TargetFile targetFile = (TargetFile) request.getAttribute(TARGET_FILE);
然后这个方法分别在一览画面和详细画面调用过两次,方法如下
public ActionForward execute(ActionMapping mapping, ActionForm aform, HttpServletRequest request,
HttpServletResponse response) throws Exception {
SessionValidator.getAccount(request);
TargetFile targetFile = (TargetFile) request.getAttribute(TARGET_FILE);
if (targetFile == null) {
log.warn("Invalid request for FileDownloadAction");
return mapping.findForward("error");
}
try {
if (StringUtils.isBlank(targetFile.getRepositoryFileId())) {
log.warn("Invalid request for FileDownloadAction: targetFileName is blank: " + targetFile);
return mapping.findForward("error");
}
// Content-Type
String ct = targetFile.getContentType();
if (ct == null) {
ct = FILEDOWNLOAD_OCTET_TYPE;
}
InputStream in = targetFile.getInputStream(); // possibly exception, but never null.
File file = File.createTempFile("dnload", null);
try {
FileUtil.copyFileFromInputStream(in, file);
String uaStr = request.getHeader("User-Agent");
if (StringUtils.contains(uaStr, "iPhone") || StringUtils.contains(uaStr, "iPad")) {
downFileFromIpadOrIphone(ct, file, targetFile.getOriginalFilename(), request, response);
} else {
downFile(ct, file, targetFile.getOriginalFilename(), request, response);
}
} catch (FileNotFoundException e) {
log.error(String.format("TargetFile %s not found", targetFile.getRepositoryFileId()));
} finally {
file.delete();
}
} finally {
//@since 4.0.2
targetFile.closeInputStreamQuietly();
}
return null;
}
问题来了,在一览画面:
在详细画面:
在详细画面那个originalFilename为什么是空啊?
"stream,读一次就空了啊。就像袋子里有个苹果,你拿出来袋子就空了。要么把你读出来的stream set回去,要么把你读出来的stream作为参数传递,不能多次读stream。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。