将文件绝对路径发送到spring boot controller作为路径参数以下载文件

时间:2018-10-15 14:26:55

标签: java jsp spring-boot

我创建了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 { }

希望有帮助!

0 个答案:

没有答案