JAVA 在request里取值,两次取的不一样

我是这么在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为什么是空啊?

阅读 3.3k
1 个回答

stream,读一次就空了啊。就像袋子里有个苹果,你拿出来袋子就空了。要么把你读出来的stream set回去,要么把你读出来的stream作为参数传递,不能多次读stream。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题