Я использую angular для загрузки больших файлов, для бэкэнда я использую весеннюю загрузку, вот код конечной точки:
@RequestMapping(value = "/download", method = RequestMethod.GET)
public StreamingResponseBody download(@PathVariable String path) throws IOException {
final InputStream file =azureDataLakeStoreService.readFile(path);
return (os) -> {
readAndWrite(file , 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) {
System.out.println("appending to file");
os.write(data, 0, read);
}
os.flush();
}
Когда я пытаюсь получить файл с помощью curl itработает, и я вижу загружаемый файл и его размер увеличивается:
curl -H "Authorization: Bearer <MyToken>" http://localhost:9001/rest/api/analyses/download --output test.zip
Однако, когда я пытаюсь загрузить файл с помощью angular, он не работает, даже если запрос выполнен успешно, и яв журналах можно увидеть текст «добавление в файл», который отображается несколько раз, но в браузере ничего не загружается, вот мой код:
this.http.get(url, { headers: headers, responseType: 'blob', observe: 'response' })
.subscribe(response => {
const contentDispositionHeader: string = response.headers.get('Content-Disposition');
const parts: string[] = contentDispositionHeader.split(';');
const filename = parts[1].split('=')[1];
const blob = new Blob([response.body], {
type: 'application/zip'
});
saveAs(blob, filename);
});
saveAs () принадлежат file-saver , кстати, приведенный выше код работает, когда я пытаюсь загрузить файл в виде байта [] (без потоковой передачи).
Все, что я могу найти в Интернете, это код , и он использует angularJsпока я использую угловую 5, кто-нибудь может указать проблему!спасибо.
ОБНОВЛЕНИЕ :
Я вижу, что файл загружается на вкладке сети Google Chrome, но я понятия не имею, где файл сохраняется.