2016-03-19 6 views
0

ich downloada Zip-Datei von einem REST gesendet versuche die Content-Type durch das Hinzufügen und die Content-Disposition wie folgt vorgehen:Rückkehr Zip-Datei von REST-Client die Datei nicht Aufspringen

Server-Seite

@Produces("application/x-zip-compressed") 
    public Response export(@PathParam("username") String username, 
      @Context UriInfo ui) { 

     long timeStamp = new Date().getTime(); 
     String exportedFolder = "/home/madmin/pods/"+username+"/download/"; 

     String Path = ui.getRequestUri().toString() 
       .replace(replaceMe + username, ""); 

     Path = Path.replace("http://", "https://"); 


     Path = Path.replace(",system/export", ""); 



     String outputZipFile = exportedFolder+"exported_on_"+timeStamp+".zip"; 
     String sourceFolder = null; 

     File file = new File(exportedFolder); 
     if (!file.exists()) { 
      if (file.mkdirs()) { 
       System.out.println("Directory is created!"); 
      } else { 
       System.out.println("Failed to create directory for exporting!"); 
       //return ; 
      } 
     } 

     constructGraphs cGraphs = new constructGraphs(Path, username); 
     sourceFolder = cGraphs.writeGraphFiles(); 

     generateZipFile appZip = new generateZipFile(sourceFolder,outputZipFile); 
      appZip.generateFileList(new File(sourceFolder)); 
      appZip.zipIt(outputZipFile); 

      //Read the outputZipFile as inputStream and return it 

      FileInputStream fileIs = null; 
     try { 
      fileIs = new FileInputStream(outputZipFile); 
     } catch (IOException e) { 
      throw new WebApplicationException(404); 
     } 

     String fileName= outputZipFile.substring(outputZipFile.lastIndexOf("/")+1, outputZipFile.length()); 

     return Response.status(Status.OK).entity(fileIs).header("Content-Disposition","attachment; filename = "+fileName).build(); 
    } 

Client-side:

die Client-Seite auf der anderen Seite erwartet application/x-zip-compressed als follows:

$http({ 
     method: 'GET', 
     url: uri, 
     headers: { 
      'Accept': 'application/x-zip-compressed' 
     }, 
     withCredentials: true 
     }). 
     success(function(data, status, headers) { 
     if (status == 200 || status == 201) { 
      notify('Success', 'Node exported.'); 
     } 
     }). 
     error(function(data, status) { 
     if (status == 401) { 
      notify('Forbidden', 'Authentication required to edit the resource.'); 
     } else if (status == 403) { 
      notify('Forbidden', 'You are not allowed to edit the resource.'); 
     } else { 
      notify('Failed', status + " " + data); 
     } 
     }); 

Die Datei wird nicht angezeigt, stattdessen sehe ich den Eingabestream in der Antwort.

Ist etwas falsch, was ich hier mache? Jede Hilfe würde wirklich geschätzt werden.

+0

dieses response.setContentType versuchen ("application/x-zip-compressed"), bevor Antwort – userRaj

+0

@userRaj Rückführen der Reaktion überprüft es standardmäßig im Header gesetzt ist, das ist, warum ich ‚didn Ich muss es explizit tun. – mzereba

Antwort