Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SpringMVC输出流_Spring_Jakarta Ee_Servlets_Spring Mvc - Fatal编程技术网

SpringMVC输出流

SpringMVC输出流,spring,jakarta-ee,servlets,spring-mvc,Spring,Jakarta Ee,Servlets,Spring Mvc,我的问题是,我有一个程序,它会生成一个文件并将其流式输出给用户&我有两个问题: 1) 首先,如何更改文件名和类型(x.sql) 2) 如果在创建文件时出现异常&我想将用户重定向到错误页面,因为当我们想在servlet中写入outputstream时,我的方法的返回类型是void 我的程序是这样的: @RequestMapping(value = "/test/{jobid}") public void dumpData(@PathVariable("jobid") long job

我的问题是,我有一个程序,它会生成一个文件并将其流式输出给用户&我有两个问题:

1) 首先,如何更改文件名和类型(x.sql)

2) 如果在创建文件时出现异常&我想将用户重定向到错误页面,因为当我们想在servlet中写入outputstream时,我的方法的返回类型是void

我的程序是这样的:

    @RequestMapping(value = "/test/{jobid}")
   public void dumpData(@PathVariable("jobid") long jobid, HttpServletResponse response) {
     try {

        response.setContentType("application/octet-stream");
        ServletOutputStream out = response.getOutputStream();
        String downloadOutput = "";
        // AM I ABLE TO SET FILENAME SO THE USER DOWNLOAD THE FILE WITH THAT NAME ?
        // DOES SETHEADER HELP ME IN THIS CASE ?

        ... (making downloadOutput String by values coming from somewhere)

        out.write(downloadOutput.getBytes("UTF-8"));
        out.flush();
        out.close();
     } catch(SomeException e){
         //WHEN THE RETURN TYPE IS VOID HOW TO REDIRECT USER TO ERROR PAGE IN CASE OF SOME PROBLEM ? 
        //(INFO:)IF WE DEFINE STRING AS RETURN TYPE THE PROGRAM WILL GET EXCEPTION 
     }

回答你的第一个问题:

response.setHeader( "Content-Disposition", "attachment;filename=" + filename );
//for zip file
response.setContentType("application/zip");
是各种内容类型的mime类型列表


我找到了解决办法。您可以将返回类型更改为字符串,并在发生错误时返回错误视图名称,否则返回null。我从链接中了解到,返回null和返回类型void是相似的。

回答第一个问题:

response.setHeader( "Content-Disposition", "attachment;filename=" + filename );
//for zip file
response.setContentType("application/zip");
是各种内容类型的mime类型列表


我找到了解决办法。您可以将返回类型更改为字符串,并在发生错误时返回错误视图名称,否则返回null。我从链接中了解到,返回null和返回类型void是相似的。

是什么阻止了您使用response.sendRedirect(errorPage)?

是什么阻止了您使用response.sendRedirect(errorPage)?

下载类型是sql&没有从文件读取,该文件是通过从某处接收数据创建的。&我的第二个问题呢?(我编辑了我的问题!)浏览器使用内容类型选择默认程序来显示文件。因为您的文件是.sql,我相信您希望用户保存它或在文本编辑器中打开它,所以“应用程序/八位字节流”或“文本/普通”应该可以工作。很抱歉,我不是SpringMVC的专家,但仍然在为您寻找解决方案。第一个问题,你的答案解决了我的问题,第二个问题的答案是“返回空”,所以什么都不会发生&页面仍将保持在原来的位置,所以请编辑你的答案并添加第二个答案&我将对其进行评分并选择它作为正确答案。。。谢谢!下载类型是sql&没有从文件读取的功能,该文件将通过从某处接收数据来创建我的第二个问题呢?(我编辑了我的问题!)浏览器使用内容类型选择默认程序来显示文件。因为您的文件是.sql,我相信您希望用户保存它或在文本编辑器中打开它,所以“应用程序/八位字节流”或“文本/普通”应该可以工作。很抱歉,我不是SpringMVC的专家,但仍然在为您寻找解决方案。第一个问题,你的答案解决了我的问题,第二个问题的答案是“返回空”,所以什么都不会发生&页面仍将保持在原来的位置,所以请编辑你的答案并添加第二个答案&我将对其进行评分并选择它作为正确答案。。。谢谢!一旦开始将文件内容写入响应,就无法重定向到错误页面。如果在此之前发生错误,您可以执行
response.sendRedirect(url)
一旦开始将文件内容写入响应,您将无法重定向到错误页面。如果在此之前发生错误,您可以执行
response.sendRedirect(url)
因为这个问题是关于流式数据2用户的,当用户单击下载链接时,我们不需要2重定向用户&他们有2个保持在同一页面上,但是如果数据流异常(如堆溢出等)时出现异常,该怎么办,因此,我们确实需要将用户重定向到另一个页面,就像错误页面一样,因为我们的用户必须知道系统内部到底发生了什么,所以我想,在这种情况下,我们可以将方法设置为string并返回null,这样对于catch异常,我们可以简单地重定向到另一个页面&一切都正常!因为这个问题是关于流数据2用户,我们不需要在用户点击下载链接时重定向用户&他们有2个停留在同一页面上,但是如果数据流异常(如堆溢出等)时出现异常会怎么样,因此,我们确实需要将用户重定向到另一个页面,就像错误页面一样,因为我们的用户必须知道系统内部到底发生了什么,所以我想,在这种情况下,我们可以将方法设置为string并返回null,这样对于catch异常,我们可以简单地重定向到另一个页面&一切都正常!