Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Delphi para la web (https://www.clubdelphi.com/foros/forumdisplay.php?f=51)
-   -   Descarga de archivo Datasnap REST (https://www.clubdelphi.com/foros/showthread.php?t=91275)

andresenlared 16-12-2016 23:30:03

Descarga de archivo Datasnap REST
 
Saludos.

Estoy realizando un proyectico en Datasnap REST con Delphi 10 seattle , y se me ha presentado un problema con un proceso que debo realizar para descargar un archivo pdf. Les cuento, la aplicacion lo que hace es consultar una base de datos, y generar un pdf y lo almacena en la carpeta docs del proyecto, luego debe descargar el pdf.

De lo que he leído, en el webfiledispacher, tiene dos propiedades: webdirectories tiene el item include para cualquier archivo que se guarde, y la parte de exclude para los templates o paginas web.
La otra propiedad webfileextensions, aqui agregue las extensiones pdf.

el codigo que estoy usando javascript es

Código:

  var link = document.createElement("a");
  var rutaPdf = 'docs/';
  var filePdf=document.getElementById("nroPred").value;
  var resultPdf=filePdf.concat('.pdf');
  link.download = filePdf;
  var tmp = rutaPdf.concat(resultPdf);
  alert(tmp);
  link.href = tmp;
  link.click();

cuando se procesa este código, no genera error, pero no descarga nada.

No se si hay otra forma de tratar la función de descargar un archivo en esta tecnología, o de indicarme como lo puedo manejar.
Muchas gracias.

jhonny 17-12-2016 13:04:44

Se me ocurre que en el server crees un método publico que devuelva el archivo, algo así:

Código Delphi [-]
uses System.NetEncoding;
//...
//...
//...

function TServerMethods.GetFileBase64: String;
var
  vStream: TStream;
  vStringStream: TStringStream;
  vBase64: TBase64Encoding;
begin
  vStream := TStream.Create;
  vStringStream := TStringStream.Create;
  try
    vStream := GetPDF; //Esto devuelve un TStream del PDF...

    vBase64 := TBase64Encoding.Create;
    vBase64.Encode(vStream, vStringStream);

    Result := vStringStream.DataString;
  finally
    vStream.Free;
    vStringStream.Free;
    vBase64.Free;
  end;
end;

Código Delphi [-]
function TServerMethods.GetPDF: TStream;
var
  vMemStream: TMemoryStream;
begin
  vMemStream := TMemoryStream.Create;
  vMemStream.LoadFromFile('C:\RutaPDF.pdf');
    
  Result := vMemStream;
end;

Esto devuelve un string de un PDF codificado en base64, lo decodificas con la función Decode de la clase TBase64Encoding y lo tratas como lo necesitas.


La franja horaria es GMT +2. Ahora son las 19:08:52.

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