Как я могу предложить пользователю открыть или сохранить файл PDF, возвращенный файлом .aspx? - PullRequest
1 голос
/ 31 марта 2009

У меня есть приложение Flex, которое вызывает страницу .aspx на нашем веб-сервере, которая создает файл PDF или Excel. Прямо сейчас я использую navigateToURL () для вызова файла, и это прекрасно работает, когда выходной файл создается успешно. Однако, если есть ошибка или тайм-аут, это невозможно узнать в фильме Flash.

Вместо этого я пытаюсь использовать URLLoader, чтобы я мог прослушивать код состояния HTTP и знать, когда загрузка завершена, однако URLLoader просто возвращает растровые данные, и ничто не побуждает пользователя открыть или сохранить выходной файл. Есть ли в любом случае, чтобы сделать это?

Вот обе версии моего кода ActionScript:

private function buildFile():void
{
    var variables:URLVariables = new URLVariables();

    variables.rptName = "report1";

    variables.rptFormat = "PDF";

    var request:URLRequest = new URLRequest();

    request.url = "/buildFile.aspx";

    request.method = URLRequestMethod.POST;

    request.data = variables;

    var loader:URLLoader = new URLLoader();

    loader.addEventListener(HTTPStatusEvent.HTTP_STATUS, 
                                        httpStatusHandler);

    loader.load(request);
}


private function buildFile():void
{
    var variables:URLVariables = new URLVariables();

    variables.rptName = "report1";

    variables.rptFormat = "PDF";

    var request:URLRequest = new URLRequest();

    request.url = "/buildFile.aspx";

    request.method = URLRequestMethod.POST;

    request.data = variables;

    navigateToURL(request, "_self");
}

Кстати, вот блок кода, который в данный момент выводит файл PDF или Excel:

System.Web.HttpContext httpC;
httpC = System.Web.HttpContext.Current;
httpC.Response.Clear();
httpC.Response.ClearHeaders();
httpC.Response.Expires = 0;
switch (ReportFormat)
{
    case "Excel": Response.ContentType = "application/vnd.ms-excel";  break;

    case "PDF": Response.ContentType = "application/pdf"; ; break;

}

Response.AddHeader("Content-disposition", "attachment;filename=" + fileName);    

BinaryWriter binaryWriter = new BinaryWriter(httpC.Response.OutputStream);

binaryWriter.Write(result);

Ответы [ 2 ]

6 голосов
/ 31 марта 2009

Ваш сервер должен отправлять заголовок «application / octet-stream», когда пользователь запрашивает этот файл PSD.

С ASP.NET это может выглядеть так:

Response.ClearContent();
Response.ClearHeaders();
// with this header user will be promted to open or download file
Response.ContentType = "application/octet-stream";
// with this header, you will suggest to save file with "test.pdf" name
Response.AddHeader("Content-Disposition", "attachment; filename=test.pdf");
Response.WriteFile(Server.MapPath("~/test.pdf"));
Response.Flush();
Response.Close();

Также посмотрите здесь: Загрузка файлов во Flex с использованием класса FileReference

0 голосов
/ 31 марта 2009

Также установите для content-disposition значение "attachment" на странице aspx.

...