복붙노트

[ANGULAR] jax-rs 및 angular 2+를 사용하여 zip 파일을 다운로드하는 방법

ANGULAR

jax-rs 및 angular 2+를 사용하여 zip 파일을 다운로드하는 방법

해결법


  1. 1.JAX-RS 리소스가 주어졌습니다.

    JAX-RS 리소스가 주어졌습니다.

    @Produces({MediaType.APPLICATION_JSON})
    @Consumes({MediaType.APPLICATION_JSON})
    @Path("/myresource")
    public class MyResource {
    
        @Inject
        MyFacade myFacade;
    
        @POST
        @Path("/download")
        @Produces({"application/zip"})
        public Response download(@NotNull Request req) {
            byte[] zipFileContent = myFacade.download(req);
            return Response
                .ok(zipFileContent)
                .type("application/zip")
                .header("Content-Disposition", "attachment; filename = \"project.zip\"")
                .build();
        }
    }
    

    Angular2 응용 프로그램을 사용하여 최종 사용자에게 파일을 소비하고 제공하기 위해 다음과 같이 서비스를 사용할 수 있습니다.

    ...//other import statements
    import fileSaver = require("file-saver");
    
    @Injectable()
    export class AngularService {
    
        constructor(private http: Http) {
        }
    
        download(model: MyModel) {
            this.http.post(BASE_URL + "myresource/download", JSON.stringify(model), {
                method: RequestMethod.Post,
                responseType: ResponseContentType.Blob,
                headers: new Headers({'Content-type': 'application/json'})
            }).subscribe(
                (response) => {
                    var blob = new Blob([response.blob()], {type: 'application/zip'});
                    var filename = 'file.zip';
                    fileSaver.saveAs(blob, filename);
            }
        );
    }
    

    이 작업을 수행하려면 다음과 같이 Fixe.json에서 파일 서버를 가져와야합니다.

    "dependencies": {
        // all angular2 dependencies... 
        "file-saver": "1.3.2"
     },
    

    그리고이 서비스는 이제 다운로드 방법에 대한 액세스가 필요한 모든 구성 요소에 주입 될 수 있습니다.

  2. from https://stackoverflow.com/questions/39690426/how-to-use-jax-rs-and-angular-2-to-download-a-zip-file by cc-by-sa and MIT license