2017-10-19 206 views
0

我面临的问题是,在服务器上传zip文件后,无法解压。 我已经基于与下一个端点例如Dropwizard框架REST API:通过Dropwizard框架上传后,Zip文件无法解压缩

@Consumes(MediaType.MULTIPART_FORM_DATA) 
@Produces(MediaType.APPLICATION_JSON) 
@Path("/zip") 
public class ImportResource { 

    @POST 
    public Response fileService(@FormDataParam("fileData") InputStream fileDataInputStream, 
     @FormDataParam("fileData") FormDataContentDisposition fileDataDetail) { 

     File newFile = new File("/Users/alexx/Documents/"+ fileDataDetail.getFileName()); 

     try { 
      final OutputStream out = new FileOutputStream(newFile); 
      ByteStreams.copy(fileDataInputStream, out); 
     } catch (IOException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
     return Response.ok().build(); 
    } 
    // save uploaded file to new location 
    private void writeToFile(InputStream uploadedInputStream, String uploadedFileLocation) throws IOException { 
     int read; 
     final int BUFFER_LENGTH = 1024; 
     final byte[] buffer = new byte[BUFFER_LENGTH]; 
     OutputStream out = new FileOutputStream(new File(uploadedFileLocation)); 
     while ((read = uploadedInputStream.read(buffer)) != -1) { 
      out.write(buffer, 0, read); 
     } 
     out.flush(); 
     out.close(); 
    } 

此外,在应用类我提供适当的类:

.... 
bootstrap.addBundle(new MultiPartBundle()); 
.... 
environment.jersey().register(MultiPartFeature.class); 

上传zip文件,它看起来像它上传后,但它不能解压缩,收到下一条消息:

(错误1 - 操作不允许)。

文本和图像文件上传并正确打开。

我跳过了什么吗?我应该添加额外的参数还是设置在某个地方? 谢谢你的答案!

回答

0

这是我的错误。

我发现过滤器可以在有效载荷与资源打交道之前使用。

该过滤器具有下一个代码:

payload = IOUtils.toString(requestContext.getEntityStream(), StandardCharsets.UTF_8); 
      if (payload != null) { 
       RequestPayloadHolder.getRequestPayload().setPayload(payload); 
       InputStream in = IOUtils.toInputStream(payload, StandardCharsets.UTF_8); 
       requestContext.setEntityStream(in); 
      } 

与多部分/格式数据所以实体不能被转移到串和否则正确。

在此请求实现之前,所有其他请求负载均为JSON。

我必须更加小心。