你能帮我解决下面的问题吗?我有一个“DownloadFile”Servlet,可让您下载 CSV 文件。 Servlet 在我的本地 Windows 机器上运行,但是在我的服务器上,它抛出错误,拒绝下载文件路径的权限。
Tomcat 安装在 Tomcat User 上。 Tomcat 用户是几个文件夹的所有者,但是,我仍然遇到权限被拒绝的问题。
下面是代码和错误:
File f = new File("\\opt\\tomcat\\logs\\myfile.csv");
int length = 0;
ServletOutputStream op = response.getOutputStream();
ServletContext context = getServletConfig().getServletContext();
String mimetype = context.getMimeType("text");
response.setContentType((mimetype != null) ? mimetype: "application/octet-stream");
response.setContentLength((int) f.length());
response.setHeader("Content-Disposition","attachment; filename=csv1.csv");
错误:
类型异常报告
消息\opt\tomcat\logs\myfile.csv(权限被拒绝)
说明服务器遇到内部错误,无法完成此请求。
异常
java.io.FileNotFoundException: \opt\tomcat\logs\myfile.csv (Permission denied)
java.io.FileOutputStream.open0(Native Method)
java.io.FileOutputStream.open(FileOutputStream.java:270)
java.io.FileOutputStream.<init>(FileOutputStream.java:213)
java.io.FileOutputStream.<init>(FileOutputStream.java:101)
java.io.FileWriter.<init>(FileWriter.java:63)
in.travelfiles.Csv1.doGet(Csv1.java:51)
javax.servlet.http.HttpServlet.service(HttpServlet.java:622)
javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
最佳答案
在基于 Unix 的环境中,文件分隔符是正斜杠。 Unix 机器不会喜欢反斜杠字符。当您构建文件路径字符串时,Java 允许您使用类似于 O/S 的方式创建它:
String fileSeparator = System.getProperty("file.separator");
String fileName = fileSeparator + "opt" + fileSeparator + "tomcat" +
fileSeparator + "logs" + fileSeparator + "myfile.csv";
fileName 可以在 Windows 或 Unix 上使用。
我将从这里开始,看看您是否可以阅读该文件。 O/S 仍然有可能不允许运行 Tomcat 的用户读取文件,而是首先将其放入 Unix 可以理解的路径。
关于ubuntu - Tomcat 上的权限被拒绝,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42000314/