Как скачать файл с Angular2

Вы можете изменить цвет кнопки, применив цвет оттенка к UIAlertController.

На iOS 9, если цвет оттенка окна был установлен на пользовательский цвет, вам необходимо применить цвет оттенка сразу после представляя предупреждение. В противном случае цвет оттенка будет сброшен до вашего цвета оттенка пользовательского окна.

// In your AppDelegate for example:
window?.tintColor = UIColor.redColor()

// Elsewhere in the App:
let alertVC = UIAlertController(title: "Title", message: "message", preferredStyle: .Alert)
alertVC.addAction(UIAlertAction(title: "Cancel", style: .Cancel, handler: nil))
alertVC.addAction(UIAlertAction(title: "Ok", style: .Default, handler: nil))

// Works on iOS 8, but not on iOS 9
// On iOS 9 the button color will be red
alertVC.view.tintColor = UIColor.greenColor()

self.presentViewController(alert, animated: true, completion: nil)

// Necessary to apply tint on iOS 9
alertVC.view.tintColor = UIColor.greenColor()
145
задан E_net4 on strike 27 November 2018 в 15:41
поделиться

1 ответ

Ну, я записал часть кода, вдохновленного многими вышеупомянутыми ответами, которые должны легко работать в большинстве сценариев, куда сервер отправляет файл с заголовком расположения содержания, без любых сторонних установок, кроме rxjs и угловой.

Первый, как назвать код из Вашего файла

this.httpclient.get(
   `${myBackend}`,
   {
      observe: 'response',
      responseType: 'blob'
   }
).pipe(first())
.subscribe(response => SaveFileResponse(response, 'Custom File Name.extension'));

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

  1. я наблюдаю ответ вместо тела
  2. , я являюсь явным об ответе, являющемся блобом

, После того как файл выбирается с сервера, я в принципе, делегируя всю задачу того, чтобы сохранить файл к функции помощника, которую я сохраняю в отдельном файле и импорте в то, какой бы ни компонент мне нужно к

export const SaveFileResponse = 
(response: HttpResponse<Blob>, 
 filename: string = null) => 
{
    //null-checks, just because :P
    if (response == null || response.body == null)
        return;

    let serverProvidesName: boolean = true;
    if (filename != null)
        serverProvidesName = false;

    //assuming the header is something like
    //content-disposition: attachment; filename=TestDownload.xlsx; filename*=UTF-8''TestDownload.xlsx
    if (serverProvidesName)
        try {
            let f: string = response.headers.get('content-disposition').split(';')[1];
            if (f.includes('filename='))
                filename = f.substring(10);
        }
        catch { }
    SaveFile(response.body, filename);
}

//Create an anchor element, attach file to it, and
//programmatically click it. 
export const SaveFile = (blobfile: Blob, filename: string = null) => {
    const a = document.createElement('a');
    a.href = window.URL.createObjectURL(blobfile);
    a.download = filename;
    a.click();
}

Там, никакие более загадочные имена файлов GUID! Мы можем использовать любое имя, которое сервер обеспечивает, не имея необходимость указывать его явно в клиенте, или, перезаписывать имя файла, обеспеченное сервером (как в этом примере). Кроме того, можно легко, если потребуется, изменить алгоритм извлечения имени файла от довольного расположения для удовлетворения их потребностям, и все остальное останется незатронутым - в случае ошибки во время такого извлечения, это просто передаст 'пустой указатель' как имя файла.

Как другой ответ, на который уже указывают, IE нужен некоторый специальный режим, как всегда. Но с краем хрома, прибывающим через несколько месяцев, я не волновался бы об этом при создании новых приложений (надо надеяться). Существует также вопрос отмены URL, но я - вид not-so-sure об этом, поэтому если бы кто-то мог бы выручить с этим в комментариях, которые были бы потрясающими.

0
ответ дан 23 November 2019 в 22:18
поделиться
Другие вопросы по тегам:

Похожие вопросы: