Autorisation Tomcat refusée lors de la tentative d’écriture d’un fichier

J’essaye d’envoyer un zip via le serveur tomcat. Mais quand j’essaie d’accéder à http: // localhost: 8094 / fetna-project-rest / webapi / retdoc / 10 J’ai reçu une erreur de permission que j’ai incluse dans le bas. Je lance le serveur sur Ubuntu. Pouvez-vous m’aider s’il vous plaît? Mes codes sources sont ici:

public static void addToZipFile(Ssortingng 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, 0, length); } zos.closeEntry(); fis.close(); } @GET @Path("retdoc/{id}") @Produces(MediaType.APPLICATION_OCTET_STREAM) public Response resortingeveDocument(@PathParam("id") Ssortingng ID) throws IOException { FileOutputStream fos = new FileOutputStream("test.zip"); ZipOutputStream zos = new ZipOutputStream(fos); Ssortingng 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=\"resortingevedDocuments.zip\"") .build(); } 

et mon stacktrace:

 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.(FileOutputStream.java:221) java.io.FileOutputStream.(FileOutputStream.java:110) org.eu.srdc.ehealth.MyResource.resortingeveDocument(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. 

L’utilisateur qui exécute tomcat n’est pas autorisé à écrire le fichier, comme le dit l’erreur. Nous vous suggérons de choisir un dossier spécifique dans lequel vos fichiers téléchargés seront enregistrés et de donner à l’utilisateur de tomcat des droits d’écriture (modifiez le nom d’utilisateur et le chemin en conséquence):

 $ sudo mkdir /home/tomcat/uploads $ sudo chown tomcat:tomcat /home/tomcat/uploads $ sudo chmod u+wrx /home/tomcat/uploads 

Puis changez votre code de servlet pour utiliser le chemin de téléchargement (ligne modifiée ci-dessous):

 FileOutputStream fos = new FileOutputStream("/home/tomcat/uploads/test.zip");