Как определить имя файла при потоковой передаче PDF в браузере?

1: Как я могу использовать здесь async / await вместо Future.then ()? Какое самое элегантное решение?

blockquote>

асинхронные методы заразительны. Это означает, что ваш метод ItemsRepository должен быть асинхронным, чтобы использовать await внутри. Это также означает, что вы должны вызывать его асинхронно из других мест. Смотрите пример:

Future ItemsRepository() async {
    // #1
    myString = await rootBundle.loadString('assets/data/item_int2string.json');
    // do something with my string here, which is not in a Future anymore...
  }

Обратите внимание, что использование .then - это то же самое, что и ожидание в асинхронной функции. Это просто синтаксический сахар. Обратите внимание, что вы будете использовать .then иначе, чем в вашем примере:

  ItemsRepository() {
    // #1

     rootBundle.loadString('assets/data/item_int2string.json').then((String myString) {
       // do something with myString here, which is not in a Future anymore...
     });
  }

И для # 2 не беспокойтесь о влиянии асинхронного кода на производительность. Код будет выполняться с той же скоростью, что и синхронный код, чуть позже, когда произойдет обратный вызов. Единственная причина, по которой существует асинхронность, заключается в простом способе продолжения работы кода, пока система ожидает возврата асинхронно вызываемой части. Например, не блокируйте пользовательский интерфейс, ожидая, пока диск загрузит файл.

Я рекомендую вам прочитать основные документы об асинхронности в Dart .

9
задан mattruma 6 December 2008 в 18:06
поделиться

2 ответа

Обычно, через заголовок довольного расположения - т.е.

Content-Disposition: inline; filename=foo.pdf

Поэтому просто используйте Заголовки. Добавьте, или AddHeader, или независимо от того, что это, с:

ответ. Заголовки. Добавьте ("Довольное Расположение", "встройте; filename=foo.pdf");

(встроенный "шоу в браузере", вложение, "сохраняют как файл"),

17
ответ дан 4 December 2019 в 08:53
поделиться
System.IO.MemoryStream stream = new System.IO.MemoryStream();

stream = (System.IO.MemoryStream)this.Report.ExportToStream(CrystalDecisions.Shared.ExportFormatType.PortableDocFormat);

this.Response.Clear();
this.Response.Buffer = true;
this.Response.ContentType = "application/pdf";
this.Response.AddHeader("Content-Disposition", "attachment; filename=\""+FILENAME+"\"");
this.Response.BinaryWrite(stream.ToArray());
this.Response.End();
7
ответ дан 4 December 2019 в 08:53
поделиться
Другие вопросы по тегам:

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