2017-10-19 3 views
0

Ich konfrontiert mit dem Problem, dass nach dem Hochladen von Zip-Datei auf einem Server kann nicht entpackt werden. Ich habe REST-API basiert auf Dropwizard Rahmen mit dem nächsten Endpunkt Beispiel:Zip-Datei kann nicht entpackt werden nach dem Hochladen über Dropwizard Framework

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

Auch in Anwendungsklasse I bereitgestellt entsprechenden Klassen:

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

Nach Zip-Datei hochladen, es sieht aus wie es uploads, aber es kann nicht entpackt werden, nächste Nachricht empfangen:

(Fehler 1 - Betrieb nicht erlaubt).

Text- und Bilddateien werden korrekt hochgeladen und geöffnet.

Habe ich etwas übersprungen? Sollte ich zusätzliche Parameter hinzufügen oder irgendwo einstellen? Vielen Dank für Antworten!

Antwort

0

Es war mein Fehler.

Ich fand den Filter, der mit Nutzlast arbeitet, bevor es zu einer Ressource kommt.

Der Filter hat nächsten Code:

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); 
      } 

So Einheit mit multipart/form-data nicht zu String übertragen werden kann und ansonsten richtig.

Vor dieser Anforderungsimplementierung waren alle anderen Anforderungsnutzlasten JSON.

Ich muss vorsichtiger sein.

Verwandte Themen