java – 尝试写入文件时拒绝Tomcat权限
发布时间:2020-12-15 04:32:28 所属栏目:Java 来源:网络整理
导读:我想通过tomcat服务器发送一个zip.但是当我尝试访问 http://localhost:8094/fetna-project-rest/webapi/retdoc/10时,我收到了一个权限错误,我将其包含在底部.我在ubuntu上运行服务器.你能帮我么?我的源代码在这里: public static void addToZipFile(String
我想通过tomcat服务器发送一个zip.但是当我尝试访问
http://localhost:8094/fetna-project-rest/webapi/retdoc/10时,我收到了一个权限错误,我将其包含在底部.我在ubuntu上运行服务器.你能帮我么?我的源代码在这里:
public static void addToZipFile(String fileName,ZipOutputStream zos) throws FileNotFoundException,IOException { System.out.println("Writing '" + fileName + "' to zip file"); File file = new File(fileName); if (!file.exists()) { file.createNewFile(); } FileInputStream fis; fis = new FileInputStream(file); ZipEntry zipEntry = new ZipEntry(fileName); zos.putNextEntry(zipEntry); byte[] bytes = new byte[1024]; int length; while ((length = fis.read(bytes)) >= 0) { zos.write(bytes,length); } zos.closeEntry(); fis.close(); } @GET @Path("retdoc/{id}") @Produces(MediaType.APPLICATION_OCTET_STREAM) public Response retrieveDocument(@PathParam("id") String ID) throws IOException { FileOutputStream fos = new FileOutputStream("test.zip"); ZipOutputStream zos = new ZipOutputStream(fos); String file1Name = "test.txt"; addToZipFile(file1Name,zos); zos.close(); fos.close(); File zippedFile = new File("test.zip"); return Response.ok(FileUtils.readFileToByteArray(zippedFile)) .type("application/zip") .header("Content-Disposition","attachment; filename="retrievedDocuments.zip"") .build(); } 和我的堆栈跟踪: message org.glassfish.jersey.server.ContainerException: java.io.FileNotFoundException: test.zip (Permission denied) description The server encountered an internal error that prevented it from fulfilling this request. exception javax.servlet.ServletException: org.glassfish.jersey.server.ContainerException: java.io.FileNotFoundException: test.zip (Permission denied) org.glassfish.jersey.servlet.WebComponent.serviceImpl(WebComponent.java:487) org.glassfish.jersey.servlet.WebComponent.service(WebComponent.java:425) org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:383) org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:336) org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:223) org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) root cause org.glassfish.jersey.server.ContainerException: java.io.FileNotFoundException: test.zip (Permission denied) org.glassfish.jersey.servlet.internal.ResponseWriter.rethrow(ResponseWriter.java:278) org.glassfish.jersey.servlet.internal.ResponseWriter.failure(ResponseWriter.java:260) org.glassfish.jersey.server.ServerRuntime$Responder.process(ServerRuntime.java:509) org.glassfish.jersey.server.ServerRuntime$2.run(ServerRuntime.java:334) org.glassfish.jersey.internal.Errors$1.call(Errors.java:271) org.glassfish.jersey.internal.Errors$1.call(Errors.java:267) org.glassfish.jersey.internal.Errors.process(Errors.java:315) org.glassfish.jersey.internal.Errors.process(Errors.java:297) org.glassfish.jersey.internal.Errors.process(Errors.java:267) org.glassfish.jersey.process.internal.RequestScope.runInScope(RequestScope.java:317) org.glassfish.jersey.server.ServerRuntime.process(ServerRuntime.java:305) org.glassfish.jersey.server.ApplicationHandler.handle(ApplicationHandler.java:1154) org.glassfish.jersey.servlet.WebComponent.serviceImpl(WebComponent.java:471) org.glassfish.jersey.servlet.WebComponent.service(WebComponent.java:425) org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:383) org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:336) org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:223) org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) root cause java.io.FileNotFoundException: test.zip (Permission denied) java.io.FileOutputStream.open(Native Method) java.io.FileOutputStream.<init>(FileOutputStream.java:221) java.io.FileOutputStream.<init>(FileOutputStream.java:110) org.eu.srdc.ehealth.MyResource.retrieveDocument(MyResource.java:78) sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) java.lang.reflect.Method.invoke(Method.java:606) org.glassfish.jersey.server.model.internal.ResourceMethodInvocationHandlerFactory$1.invoke(ResourceMethodInvocationHandlerFactory.java:81) org.glassfish.jersey.server.model.internal.AbstractJavaResourceMethodDispatcher$1.run(AbstractJavaResourceMethodDispatcher.java:144) org.glassfish.jersey.server.model.internal.AbstractJavaResourceMethodDispatcher.invoke(AbstractJavaResourceMethodDispatcher.java:161) org.glassfish.jersey.server.model.internal.JavaResourceMethodDispatcherProvider$ResponSEOutInvoker.doDispatch(JavaResourceMethodDispatcherProvider.java:160) org.glassfish.jersey.server.model.internal.AbstractJavaResourceMethodDispatcher.dispatch(AbstractJavaResourceMethodDispatcher.java:99) org.glassfish.jersey.server.model.ResourceMethodInvoker.invoke(ResourceMethodInvoker.java:389) org.glassfish.jersey.server.model.ResourceMethodInvoker.apply(ResourceMethodInvoker.java:347) org.glassfish.jersey.server.model.ResourceMethodInvoker.apply(ResourceMethodInvoker.java:102) org.glassfish.jersey.server.ServerRuntime$2.run(ServerRuntime.java:326) org.glassfish.jersey.internal.Errors$1.call(Errors.java:271) org.glassfish.jersey.internal.Errors$1.call(Errors.java:267) org.glassfish.jersey.internal.Errors.process(Errors.java:315) org.glassfish.jersey.internal.Errors.process(Errors.java:297) org.glassfish.jersey.internal.Errors.process(Errors.java:267) org.glassfish.jersey.process.internal.RequestScope.runInScope(RequestScope.java:317) org.glassfish.jersey.server.ServerRuntime.process(ServerRuntime.java:305) org.glassfish.jersey.server.ApplicationHandler.handle(ApplicationHandler.java:1154) org.glassfish.jersey.servlet.WebComponent.serviceImpl(WebComponent.java:471) org.glassfish.jersey.servlet.WebComponent.service(WebComponent.java:425) org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:383) org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:336) org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:223) org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) note The full stack trace of the root cause is available in the Apache Tomcat/8.0.30 logs. 解决方法
运行tomcat的用户没有写入文件的权限,就像错误所说的那样.
建议您选择保存上传文件的特定文件夹,并为其授予tomcat用户写入权限(相应地更改用户名和路径): $sudo mkdir /home/tomcat/uploads $sudo chown tomcat:tomcat /home/tomcat/uploads $sudo chmod u+wrx /home/tomcat/uploads 然后更改您的servlet代码以使用上传路径(下面的修改行): FileOutputStream fos = new FileOutputStream("/home/tomcat/uploads/test.zip"); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |