gpt4 book ai didi

java - 从 Spring Controller 下载文件并返回 String

转载 作者:行者123 更新时间:2023-12-01 14:08:06 27 4
gpt4 key购买 nike

我已经阅读了几种从 Spring Controller 方法下载文件的方法,返回 FileSystemResource 或 void 并使用 outputStream。我想要的是返回一个字符串,因为我想首先验证用户输入。类似...

public String downloadFile(BindingResult result, RedirectAttributes attr, ...) {
if(result.hasErrors()) {
....
return "redirect:/showForm";
}
...
return "success";
}

这可能吗?我必须采取哪些替代方案才能做到这一点?谢谢

最佳答案

如果我理解正确,您想要做的是将用户发送到一个页面,例如“它不起作用/验证”页面或发送文件。

如果是这种情况,我们解决这个问题的方法是从我们的处理程序返回一个 ModelAndView 。您也可以将其作为参数包含到处理程序中,Spring 将为您创建一个处理程序,您只需返回它即可。如果表单输入验证失败,我们设置 ViewModelAndView 上设置自定义 View ,该 View 将设置 Content-Disposition 和相关 header ,然后从 HttpServletResponse 获取 OutputStream 并将文件以字节形式写出。

类似这样的东西(伪代码,因此可能需要调整):

@RequestMapping("/myHandler")
public ModelAndView myHandler(@ModelAttribute("myBean") MyBean myBean, BindingResults results, ModelAndView mav) {
if (results.hasErrors()) {
mav.setViewName("myErrorView"); // Uses the default view you have setup, passing the name as if you returned a String
} else {
mav.setView(new FileOutputView(dataToOutputOrWhatever); // Custom View class to output file as needed
}
return mav
}

但是,如果您想返回一个字符串并下载文件,那么您必须跳过一些步骤。我发现执行此操作的最简单方法是设置一个可以在 JSP 端读取的模型属性,该属性告诉 JSP 是否调用文件下载。在 JSP 代码中,您可以结合使用 JSTL 和 JavaScript 来触发下载,可以使用 AJAX,或者在我们的例子中使用 JavaScript 在 IFRAME 中进行下载。

关于java - 从 Spring Controller 下载文件并返回 String,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18748369/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com