Что эквивалентно window.location.href в Angular - PullRequest
0 голосов
/ 19 ноября 2018

В моем приложении пользователи могут загружать файл в виде потока из бэкэнда, который является приложением с весенней загрузкой, вот код бэкенда:

@RequestMapping(value = "/download", method = RequestMethod.GET)
public StreamingResponseBody download() throws IOException {

    final InputStream fecFile = new FileInputStream(new File("C:\\file.zip"));;
    return (os) - > {
        readAndWrite(fecFile, os);
    };
}

private void readAndWrite(final InputStream is, OutputStream os) throws IOException {
    byte[] data = new byte[2048];
    int read = 0;
    while ((read = is.read(data)) >= 0) {
        os.write(data, 0, read);
    }
    os.flush();
}

Внутри углового я использую следующее для загрузки файла:

window.location.href = "http://localhost:8080/download"

Какая работа в порядке, но я добавил аутентификацию на основе токенов доступа, и я не могу добавить токен в window.location.href, есть ли способ сделать это в angular, я попытался использовать HttpModule но он не загружает файл (он не показывает никакого ответа или ошибки, даже если мой контроллер был вызван), так есть ли способ добиться этого, возможно, с помощью jquery или другого libreary?

1 Ответ

0 голосов
/ 19 ноября 2018

Вы должны создать определенный метод (в сервисе или непосредственно из компонента, это ваше дело, но я предпочитаю принцип SOC, поэтому я отделился)

По части обслуживания:

const httpOptions = {
    headers: new HttpHeaders({
      'Key': key
    })
  };

  getFile(){

    return this.http.get("http://localhost:8080/download", httpOptions )

  }

и позже на стороне вашего компонента:

 constructor(private myService: MyTestServiceService ) { }


 downloadFile(data: Response) {

    const blob = new Blob([data], { type: 'text/pdf' }); // pdf is an example
    const url= window.URL.createObjectURL(blob);
    window.open(url);

}

 myMethodToCallMyService() {

   this.myService.getFile()
       .subscribe(

         (data) => {
           this.downloadFile(data)
         },

        (error) => {
           console.log("Server error");
         }

       );
   }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...