SpringMVC输出流
我的问题是,我有一个程序,它会生成一个文件并将其流式输出给用户&我有两个问题: 1) 首先,如何更改文件名和类型(x.sql) 2) 如果在创建文件时出现异常&我想将用户重定向到错误页面,因为当我们想在servlet中写入outputstream时,我的方法的返回类型是void 我的程序是这样的: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
@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异常,我们可以简单地重定向到另一个页面&一切都正常!