我创建了spring boot Web应用程序,其中列出了文件夹及其嵌套文件夹中的所有文件,并将其显示在jsp页面中。我的jsp中的代码段如下所示。
<div>
<c:if test="${not empty lists}">
<ul>
<c:forEach var="listValue" items="${lists}">
<li>
<a
href='${pageContext.request.contextPath}/logFilesList/download/<c:out value="${listValue}" />'>${listValue}</a>
</c:forEach>
</ul>
</c:if>
</div>
这里列表是字符串数组列表,包含从我的控制器发送的file.getabsolutepath(),并且显示为超链接,以便用户单击该文件时,该文件将被下载。
>我负责下载文件的控制器方法如下
@RequestMapping("/logFilesList/download/{fileName:.+}")
public void downloadLogFiles(HttpServletRequest request, HttpServletResponse response,
@PathVariable("fileName") String fileName) throws IOException {
// Logic to download the file
}
如果我发送file.getName()即文件名,那么当用户单击链接时,它达到了上面的控制器方法,并且我能够下载它。但是,如果我发送file.getabsolutepath(),那么它甚至都无法到达上述控制器方法。
我正在使用file.getabsolutepath()列出文件夹及其嵌套文件夹中的所有文件。
请建议如何将file.getabsolutepath()作为路径参数发送到控制器方法。
我已经尝试了下面堆栈溢出链接中提到的建议 Send file path as @PathVariable in Spring MVC 但这并没有帮助我。
更新
如果我将反斜杠替换为其他字符,则可以使用。但是我不应该替换文件路径中的字符。因此,我尝试发送编码的URL,而不是用其他字符替换。
我的网址显示如下 http://localhost:8080/download?fileName=C%3A%2FElasticDemoLogs%2Ftest-configuration-jpa.log
但是即使在这种情况下,它也无法到达我的控制器。
任何建议都值得赞赏。 谢谢
Update-2
能够解决此问题。
这是我所做的
-使用Javascript发送到请求参数的文件路径和
-定义的控制器方法如下
@GetMapping(produces = MediaType.TEXT_PLAIN_VALUE)
public @ResponseBody void downloadLogFiles(@RequestParam("path") String path, HttpServletResponse response)
throws IOException { }
希望有帮助!