Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Internet (https://www.clubdelphi.com/foros/forumdisplay.php?f=3)
-   -   Error al enviar archivo PDF desde una aplicacion WebBroker (https://www.clubdelphi.com/foros/showthread.php?t=82331)

lbuelvas 24-02-2013 19:37:18

Error al enviar archivo PDF desde una aplicacion WebBroker
 
Hola familia.

Estoy desarrollando un servicio de consulta de recibos de catastro via web, ya tengo funcionando lo concerniente a las consultas y la generacion del recibo en pdf dado un numero catastral. Estoy haciendo las pruebas para descargar el recibo en formato pdf hacia el lado del navegador y me saca error, traté de hacer pruebas con un archivo jpg (que es el código que muestro abajo) y en el navegador Firefox saca el siguiente mensaje "No se puede mostrar la imagen "http:/localhost:8080/exportar porque contiene errores"" y en el navegador Chrome aparece un icono en la esquina superior izquierda monstrando una imagen rota (indicando que la imagen no se puede visualizar); sin embargo logro grabar la imagen y la abro con un editor de texto (no la abro con un editor de imagenes) y me sale el texto "Hola mundo". Esta situacion es identica si trato de manejar un archivo .pdf.

Código Delphi [-]
procedure TWebModule1.WebModule1WebActionItem1Action(Sender: TObject; Request: TWebRequest; Response: TWebResponse; var Handled: Boolean);
var
  FileStream : TFileStream;
begin
    FileStream := nil;
    try
      Response.Title := 'Descargando Archivo ...';
      Response.CustomHeaders.Add('Content-Disposition=filename=' + ExtractFileName('C:\Archivos\salidaxx.jpg'));
      Response.ContentType := 'image/jpg';
      FileStream := TFileStream.Create('C:\Archivos\salidaxx.jpg', fmOpenRead + fmShareDenyNone);
      Response.ContentStream := FileStream;
      Response.SendResponse;
      Handled := True;
    finally
      FileStream.Free;
    end;
end;

Estoy trabajando con Delphi XE3 / WebBroker / Windows 7 x 64, también he probado el programa en un servidor virtual Windows 2008 Server que contraté con RackSpace y sale el mismo error; he probado incluso deshabilitando el Firewall de Windows y nada.

Agradezco cualquier colaboración.

lbuelvas 24-02-2013 19:56:22

Me autorespondo.

Llevo tratando de resolver el problema aproximadamente 7 dias de trabajo. Se me ocurrió, justo después de iniciar este hilo hacer un proyecto completamente nuevo y pegar solamente el segmento de código que les mandé y funcionó bien. Ahora me toca sentarme a revisar todo el proyecto para ver que fue lo que pasó o que otro elemento interfiere en el buen funcionamento de ese fragmento de código.

Parece que la instrucción
Código Delphi [-]
FileStream.Free;
es innecesaria porque
Código Delphi [-]
Response.SendResponse;
libera el recurso.

Cualquier sugerencia es bien recibida.

Gracias.

ecfisa 24-02-2013 20:06:17

Cita:

Empezado por lbuelvas (Mensaje 455496)
...
Parece que la instrucción
Código Delphi [-]
FileStream.Free;
es innecesaria porque
Código Delphi [-]
Response.SendResponse;
libera el recurso.

Hola Luis.

Al parecer estás acertado sobre el motivo, así está comentado en el ejemplo de la ayuda de Delphi:
Código:

procedure TCustomerInfoModule.CustomerInfoModuleGetImageAction( Sender: TObject; Request: TWebRequest; Response: TWebResponse; var Handled: Boolean);
var
  Jpg: TJPEGImage;
  S: TMemoryStream;
  B: TBitmap;
begin
  Jpg := TJPEGImage.Create;
  try
    B := TBitmap.Create;
    try
      B.Assign(BioLifeGraphic);
      Jpg.Assign(B);
    finally
      B.Free
    end;
    S := TMemoryStream.Create;
    Jpg.SaveToStream(S);
    S.Position := 0;
    Response.ContentType := 'image/jpeg';
    Response.ContentStream := S;
  // do not free the stream because the response
    // object will handle that task.

  finally
    Jpg.Free;
  end;
end;

Saludos.


La franja horaria es GMT +2. Ahora son las 12:39:18.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi