Как загрузить файл с новым HttpClient? - PullRequest
0 голосов
/ 29 августа 2018

Итак, как это работало, я сделал 'GET' и предоставил ID, а с возвращенными данными мне просто нужно было сделать это:

const subscription = this.downloadService.downloadFile(id, this.file.folderId).subscribe(data => {
    window.location.href = data.url;
    subscription.unsubscribe();
});

И Chrome автоматически загрузит файл и останется на сайте.

Теперь я делаю это:

const subscription = this.downloadFile(id, folderId).subscribe(data => {
    const blob = new Blob([data], { type: 'image' });
    const blobUrl = window.URL.createObjectURL(blob);
    window.location.href = blobUrl;
    subscription.unsubscribe();  
});

И Chrome также начинает загрузку, но это всегда один и тот же файл, похожий на это в консоли:

enter image description here

Я пытался преобразовать его в файл, но для «window.location.href» нужен URL, а у меня его нет, когда я конвертирую его в файл, подобный следующему:

const file = new File([blob], name, { lastModified: Date.now(), type: 'image' })

Что мне нужно сделать с этими данными, чтобы убедиться, что они загружаются как изображения (я всегда пытаюсь загрузить изображения)?

РЕДАКТИРОВАТЬ: Таким образом, очевидно, мои httpParams были реализованы неправильно! Это был неправильный путь:

const httpParams = new HttpParams();
httpParams.append('action', 'downloadFile');
httpParams.append('fileIds', id.toString());
httpParams.append('currentLibraryFolderId', folderId.toString());

Который прошел только пустой httpParams. Это правильный путь:

const params = new HttpParams()
    .set('action', 'downloadFile')
    .set('fileIds', id.toString())
    .set('currentLibraryFolderId', folderId.toString());

1 Ответ

0 голосов
/ 29 августа 2018

Попробуйте с window.open(url):

Если тип будет поддерживаться браузером, например image или pdf и т. Д., открыть иначе загрузить его.

HTML:

<a (click)="downloadFile(fileData, type)" download>Download File</a>

Для загрузки и сохранения с помощью FileSaver:

 npm install file-saver --save

 import { saveAs } from 'file-saver/FileSaver';

Если вы получаете ответ как arraybuffer

var blob = new Blob([data], { type: type});

var url = window.URL.createObjectURL(blob);

saveAs(blob, filename);

var winOpen = window.open(url);


// If Popup blocked
if (!winOpen || winOpen.closed || typeof winOpen.closed == 'undefined') {
       alert( 'Please disable your Pop-up blocker and try again.');
 }
...