2016-02-16 2 views
1

Я пытаюсь отправить zip через сервер tomcat. Но когда я пытаюсь получить доступ к http://localhost:8094/fetna-project-rest/webapi/retdoc/10, я получил ошибку разрешения, которую я включил в нижнюю часть. Я запускаю сервер на ubuntu. Не могли бы вы мне помочь? Мои исходные коды здесь:Разрешение Tomcat отклонено при попытке записать файл

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, 0, 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(); 
} 

и мой 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.<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. 

ответ

4

Пользователь работает кот не имеет права на запись в файл, так же, как ошибка говорит. предложить Вам выбрать конкретную папку, в которой загруженные файлы будут сохранены в и предоставить пользователю права кот записи на него (изменить имя пользователя и путь соответственно):

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

Затем измените свой код сервлета использовать путь загрузки (измененная строка ниже):

FileOutputStream fos = new FileOutputStream("/home/tomcat/uploads/test.zip"); 
Смежные вопросы