我必须创建一个Web应用程序,用于从文件夹下载文件。我使用Tomcat作为服务器。我写了一个JSP页面,列出了我的数据文件夹的内容,我试图从这个文件夹中为每个文件建立链接
JSP页面是这样的:
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1" import="java.io.File,java.io.IOException,java.util.*,java.io.*" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
Contents <br>
<% File f = new File("C:\\Users\\name\\Desktop\\eclipse\\app\\PTW\\WebContent\\data\\"); // current directory
File[] files = f.listFiles();
for (File file : files) {
if (file.isDirectory()) {
//System.out.print("directory:");
} else {
%>
<a href="<%=file.getAbsolutePath()%>" target="_blank"><br> <%=file.getName() %>
</a>
<%
}
}
%>
</body>
</html>
问题是下载这些文件仅适用于I.E.并且仅当用户选择Right CLick - 将目标另存为。
时所以我的方法是错误的!但我不明白为什么?如何强制从这个JSP下载文件?
谢谢!
答案 0 :(得分:0)
您必须知道文件系统上文件的路径与网址的路径不同。文件系统仅为您的服务器所知,URL是浏览器访问的路径。
假设您的文件位于/opt/tomcat/webapps/myApp/folder/file.jpg
,并且您正在www.example.com
上运行Tomcat。如果您生成(通过JSP)类似
<a href="/opt/tomcat/webapps/myApp/folder/file.jpg">Download File</a>
您的浏览器会将此路径视为:
www.example.com/opt/tomcat/webapps/myApp/folder/file.jpg
您的浏览器无法找到该文件。浏览器找到它的URL是:
www.example.com/myApp/folder/file.jpg
其中包含
www.example.com
myApp
folder/file.jpg
因此,您需要在JSP中构建路径/myApp/folder/file.jpg
。你可以这样做:
<a href="${pageContext.request.contextPath}/folder/file.jpg">Download</a>
我在这里使用Expression Language而不是scriptlet。这被认为是更好的风格,因为它提高了维护性和可读性。
注意:仅当您的文件位于Web应用程序目录(myApp
)内时,此操作才有效。如果它在外面,你需要一个servlet来将文件流式传输到客户端,但这是另一个故事。