PDA

Ver la Versión Completa : Descarga de archivo Datasnap REST


andresenlared
16-12-2016, 22:30:03
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


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, 12:04:44
Se me ocurre que en el server crees un método publico que devuelva el archivo, algo así:


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;

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.