Установить имя ZipArchive Zip-файла в веб-API - PullRequest
1 голос
/ 14 марта 2019

Я не могу установить имя файла zip из веб-API в HttpResponseMessage. Я могу успешно создать zip-файл, используя ZipArchive со всеми его файлами содержимого, но при загрузке его со стороны клиента (хотя он действительно возвращается и открывается успешно) имя отображается в 16-байтовом шестнадцатеричном формате, как guid. Я хотел бы установить собственное имя для моего zip-файла. Где мне это сделать?

Настройка ContentDisposition не работает:

responseMessage.Content.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment")
{
     FileName = attachmentName
};

Со стороны клиента, используя Angular2 +, я возвращаю файл в виде большого двоичного объекта:

DownloadAtachment(url: string): Observable<Blob> { 
 const requestHeaders = new Headers(
    {
        'Content-Type', 'application/json',
        'Accept', 'application/zip'
    },
 );

 let options = new RequestOptions({ headers: requestHeaders });
 let args: RequestOptionsArgs = {headers: options, withCredentials:false, responseType: ResponseContentType.ArrayBuffer};

 return this._http.get(url, args)
    .map(response => {
        return new Blob([response.blob()], { type: 'application/zip'});
    });
}

Ответы [ 3 ]

1 голос
/ 15 марта 2019

Я до сих пор не совсем уверен, почему заголовки HttpResponseMessage не используются, но я просто использовал другой способ обработки ответа.Поэтому вместо того, чтобы использовать следующее для открытия большого двоичного объекта:

const fileurl = URL.createObjectURL(res);
window.open(fileurl, '_self');

я использовал @ViewChild для доступа к невидимому тегу привязки для обработки щелчка и установки имени вложения:

const fileurl = URL.createObjectURL(res);
const link = this.zipClick.nativeElement as HTMLAnchorElement;
link.href = fileurl;
link.donwload = "Name.zip";
link.click();
window.URL.revokeObjectURL(fileurl);
1 голос
/ 14 марта 2019

Я рекомендую использовать библиотеку file-saver js (отметьте Angular 2. Лучший подход к использованию FileSaver.js ) или ngx-filesaver, более подробная информация здесь https://www.npmjs.com/package/ngx-filesaver

0 голосов
/ 14 марта 2019

Если вам не нужно загружать его с помощью HttpClient от Angular, вы можете просто создать <a [href]="url" target="_blank">Download zip</a> в шаблоне.Возможно, это тоже работает.

...