Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Internet (https://www.clubdelphi.com/foros/forumdisplay.php?f=3)
-   -   Base64 IdDecoderMIME a zip (https://www.clubdelphi.com/foros/showthread.php?t=94936)

GustavoCruz 07-11-2020 06:06:11

Base64 IdDecoderMIME a zip
 
Hola amigos del foro, estoy obteniendo unos datos de un webservice por medio de un archivo Json, en el se encuentra codificado un archivo pdf, un xml y un zip

para obtener el pdf utilizo el siguiente procedimiento


Código Delphi [-]
procedure TForm1.Button3Click(Sender: TObject);
var
  decode: TIdDecoderMIME;
  stream: TMemoryStream;
begin  
  Memo4.Text := RESTResponse2.JSONValue.ToJSON;

  ParseJSON(RESTResponse2.JSONValue as TJSONObject);

  // ---------------- se crea pdf ----------------
  decode := TIdDecoderMIME.Create(nil);
  stream := TMemoryStream.Create;

  decode.DecodeStream(Memo2.Text, stream);

  stream.SaveToFile('documento.pdf');
  FreeAndNil(decode);
  FreeAndNil(stream);  

end;

estos archivos vienen codificados en base64.
Lo que no he podido es obtener el archivo zip

Gracias por su tiempo

Gustavo Cruz

dec 07-11-2020 08:55:15

Hola a todos,

¿Obtienes algún error? Quiero decir, si puedes decodificar el archivo PDF... a bote pronto no parece haber diferencia para hacer lo propio con el archivo zip... :rolleyes:

GustavoCruz 07-11-2020 20:02:18

Hola dec, con el archivo pdf no hay ningún error, y creí que sería lo mismo con el zip; simplemente escribir 'd:\archivo.zip', el problema surge es con el archivo zip, cuando lo voy abrir me dice que el archivo tiene un formato desconocido o está dañado

Casimiro Notevi 07-11-2020 22:14:08

¿Y el código?

GustavoCruz 08-11-2020 16:27:39

Hola Casimiro Notevi, quise utilizar el mismo código que para el archivo en pdf, he estado buscado en los foros para ver si había alguna solución utilizando TIdDecoderMIME, pero no he encontrado nada

Gracias por tu tiempo

GustavoCruz 08-11-2020 16:44:28

Hola esto es parte de un código para tratar el mismo problema que tengo. está en php
Código PHP:

$filename=$response['document']['number'].'.zip';
        
$data base64_decode($response['document']['zipBase64Bytes']);
        
header("Cache-Control: public");
        
header("Content-Description: File Transfer");
        
header("Content-Disposition: attachment; filename=$filename");
        
header('Content-Type: application/zip');
        return  
$data

yo necesito hacer eso mismo pero con delphi, actualmente estoy utilizando IdDecoderMIME o si hay alguna otra mejor opción.
Esto lo recibo como respuesta de un webservice en un archivo json

dec 08-11-2020 19:09:25

Hola a todos,

Iba a decirte de probar con PHP, precisamente, para comprobar que el Base64 en cuestión realmente contiene un archivo Zip válido. Es de suponer que sí, de modo que, buscando un poco por internet, me topo con esta pregunta / respuesta en Stackoverflow, donde tratan cómo convertir una cadena Base64 en un archivo binario: yo creo que podrías utilizar la respuesta, puesto que además no hace uso del "TIDEDecoderMime", que, aunque parezca raro, acaso pueda funcionar con unos archivos y no con otros (?):

https://stackoverflow.com/questions/...-binary-delphi

También en este nuestro foro podemos ver algunas soluciones para lidiar con Base64, por ejemplo, en este par de hilos:

https://www.clubdelphi.com/foros/showthread.php?t=48924

https://www.clubdelphi.com/foros/showthread.php?t=52059

GustavoCruz 08-11-2020 20:00:53

Gracias dec, ya pruebo y te cuento cómo me va

GustavoCruz 08-11-2020 20:18:47

hola amigos del foro, gracias por su ayuda y tiempo...

ya solucioné el problema y quedó como sigue

Código Delphi [-]
streamzip := TBytesStream.Create(DecodeBase64(xmlzip.Text));
  try
    streamzip.SaveToFile('d:\_xmlzip.zip');
  finally
    streamzip.Free;
  end;

utilicé la solución que se halla en https://stackoverflow.com/questions/...-binary-delphi

ElKurgan 10-11-2020 07:57:12

Gracias por compartir la solución

Saludos


La franja horaria es GMT +2. Ahora son las 13:24:20.

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