2017-10-19 2 views
0

서버에 zip 파일을 업로드 한 후 압축을 풀 수 없다는 문제가 있습니다. 내가 REST API 다음 엔드 포인트 예와 Dropwizard 프레임 워크를 기반으로 한 :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(); 
    } 

또한 Application 클래스에서 나는 적절한 수업 제공 : 그것은 업로드처럼 보이는 zip 파일을 업로드 한 후

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

을하지만, 다음 메시지 수신 :

(오류 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입니다.

더 신중해야합니다.

관련 문제