struts 如何实现下载错误 信息提示

发布于 2021-11-08 17:02:06 字数 124 浏览 770 评论 12

网页上下载出错的提示框都是有哪些实现方式的呢?

因为项目所有页面的上传和下载都公用了一个action,所以如果当下载出错(比如文件被删除,不存在)跳转到新的页面的话,”返回“就比较难实现;

 

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(12

霞映澄塘 2021-11-10 23:59:45

引用来自“龙崽”的答案

       java.io.File t_file=    new java.io.File(fileForm.getId());
        if(t_file.length()<=0){
        ShowMessage.print(request, response, "您请求的文件不存在!");
        return null;
        }
//因为下载是用 response.setHeader()这个方法的,所以在方法前 //先判断对应传来路径下有没有文件
南汐寒笙箫 2021-11-10 23:59:43

json 异步 在项目中并没有用,对这个也不是很了解丫,

泛泛之交 2021-11-10 23:59:43
       java.io.File t_file=    new java.io.File(fileForm.getId());
        if(t_file.length()<=0){
        ShowMessage.print(request, response, "您请求的文件不存在!");
        return null;
        }
//因为下载是用 response.setHeader()这个方法的,所以在方法前 //先判断对应传来路径下有没有文件
居里长安 2021-11-10 23:59:07

最简单的办法是当前页面不动, 弄一个隐藏的iframe, 点击下载的时候, 将下载的URL赋值给iframe.src, 而在404统一处理页面中弹出错误值(我的代码里是request.getAttribute("error")), 这样当前页面不会刷新, 有错误也会弹出, 没错误会出现保存文件对话框.

或者实现返回处理, 请求前将当前url保存, 如果url不是很长也可以当作url参数传递.

	private void handleReponse(HttpServletRequest request, HttpServletResponse response, Map param){
		String returnType = request.getParameter("returnType");
		String returnValue = request.getParameter("returnValue");
		try{
			//返回json数据
			if ("json".equals(returnType)){
				response.getWriter().println(BeanUtil.toJson(param));
			//返回用户回调
			}else if ("method".equals(returnType)){
				if (returnValue != null) {
					response.getWriter().println("<script>"+returnValue+"(""+BeanUtil.toJson(param).replaceAll("(['"])", "\\$1")+"");</script>");
				}
			//重定向到指定url
			}else if ("url".equals(returnType))
				response.sendRedirect(returnValue == null ? "" : returnValue);
			//返回到指定forward
			else if ("mapping".equals(returnType)){
				RequestDispatcher rd = request.getRequestDispatcher(returnValue);
				if (rd!=null) rd.forward(request, response);
			//仅返回写入值
			}else if ("result".equals(returnType)) response.getWriter().println(request.getAttribute("uploadResult"));
		}catch(Exception e){
		}
		return;
	}

凌乱心跳 2021-11-10 23:58:58

看到了你的finally,刚刚我的空指针疑惑解决了;

岁月打碎记忆 2021-11-10 23:58:28

你的方法是可解决这个提示问题的,我还有一些疑问:如果放到统一界面去处理的话,如何实现返回上一个页面呢(不包括浏览器的后退按钮哦)

韬韬不绝 2021-11-10 23:55:33

@龙崽 : 最简单的办法是当前页面不动, 弄一个隐藏的iframe, 点击下载的时候, 将下载的URL赋值给iframe.src, 而在404统一处理页面中弹出错误值(我的代码里是request.getAttribute("error")), 这样当前页面不会刷新, 有错误也会弹出, 没错误会出现保存文件对话框.

各自安好 2021-11-10 23:47:43

文件不存在直接返回404, 通过web.xml中配置的404处理页面统一展示.

月亮是我掰弯的 2021-11-10 23:47:22

引用来自“龙崽”的答案

	public ActionForward download(ActionMapping mapping, ActionForm form,
			HttpServletRequest request, HttpServletResponse response)
			throws ModuleException {
		ProjectinfoFileForm fileForm = (ProjectinfoFileForm) form;
		ProjectinfoFile file=new  ProjectinfoFile();

		String fileName=fileForm.getId().substring(fileForm.getId().lastIndexOf("/")+1,fileForm.getId().length());
		
		System.out.println(fileName);
		         
		try {

			response.setContentType("application/x-msdownload");
			response.setHeader("Content-Disposition", "attachment;"
					+ " filename="
					+ new String(fileName.getBytes(), "ISO-8859-1"));
			
			
			java.io.File t_file = new java.io.File(fileForm.getId()); 
			FileInputStream out = new FileInputStream(t_file);
			OutputStream os=response.getOutputStream();
			byte[] b=new byte[5000];
			while(out.read(b)!=-1){
				os.write(b);
			}
			os.flush();
			out.close();
			os.close();
		} catch (Exception e) {
			//throw new ModuleException(e.getMessage());
			ShowMessage.print(request, response, "文件不存在!");
			
		}
		return null;
	}
因为看清所以看轻 2021-11-10 23:31:25

恩这个疏忽了

伴我心暖 2021-11-10 21:09:52

老大 finaly里面报空指针异常了,想不通啊

蓝颜夕 2021-11-09 10:39:33
	public ActionForward download(ActionMapping mapping, ActionForm form,
			HttpServletRequest request, HttpServletResponse response)
			throws ModuleException {
		ProjectinfoFileForm fileForm = (ProjectinfoFileForm) form;
		ProjectinfoFile file=new  ProjectinfoFile();

		String fileName=fileForm.getId().substring(fileForm.getId().lastIndexOf("/")+1,fileForm.getId().length());
		
		System.out.println(fileName);
		         
		try {

			response.setContentType("application/x-msdownload");
			response.setHeader("Content-Disposition", "attachment;"
					+ " filename="
					+ new String(fileName.getBytes(), "ISO-8859-1"));
			
			
			java.io.File t_file = new java.io.File(fileForm.getId()); 
			FileInputStream out = new FileInputStream(t_file);
			OutputStream os=response.getOutputStream();
			byte[] b=new byte[5000];
			while(out.read(b)!=-1){
				os.write(b);
			}
			os.flush();
			out.close();
			os.close();
		} catch (Exception e) {
			//throw new ModuleException(e.getMessage());
			ShowMessage.print(request, response, "文件不存在!");
			
		}
		return null;
	}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文