2009-03-31 4 views
1

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

Вместо этого я пытаюсь использовать 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"); 
} 

FYI, вот блок кода, который в настоящее время выводит 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); 

ответ

6

Вы сервер должен послать «приложение/октет-поток ", когда пользователь запрашивает этот 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(); 

Также смотрите здесь: Downloading files in Flex using the FileReference class

+0

Мне нужно проверить с помощью .NET-разработчика, чтобы узнать, как он настраивает заголовки ответов. Я надеялся, что кто-то сможет помочь мне на конце Flex. –

+0

@ Эрик, почему бы не просто перенаправить пользователя на соответствующий URL-адрес с файлом PDF? –

+0

Мы хотим, чтобы появилось диалоговое окно, которое дает пользователю возможность «Сохранить» или «Открыть». Существующий код отлично работает, когда я использую navigateToURL() с «_self» в качестве цели. Но нет способа отслеживать прогресс и/или завершение. Вот почему я пытаюсь использовать URLLoader.load(). –

0

также установить контент-склонность к "прикрепление" на странице ASPX.

 Смежные вопросы

  • Нет связанных вопросов^_^