Club Builder - Foros de discusión Club Builder
Foro de C++Builder en español
 
 FAQFAQ   BuscarBuscar   MiembrosMiembros   Grupos de UsuariosGrupos de Usuarios   RegistrarseRegistrarse 
 PerfilPerfil   Entra para ver tus mensajes privadosEntra para ver tus mensajes privados   EntrarEntrar 

Descarga de archivo de internet con Pause y % no entiendo

 
Publicar nuevo tema   Responder al tema    Foros de discusión -> Consultas
Ver tema anterior :: Ver tema siguiente  
Autor Mensaje
Mensaje    Asunto: Descarga de archivo de internet con Pause y % no entiendo Responder citando

Bien e estado mirando el codigo de Leo siguiente y lo que busc o del porcentaje de la descarga teoricamente se puede sacar descifrando la cabecera del servidor pero no se hacerlo pues no se como lo envia y tampoco se salvar el stream como archivo
Cita:

Un ejemplo de su uso:
DescargarImagenJpeg("cppbuilder.hypermart.net", "/jl.jpg", Image1);

Código:
#include <memory>
#include <ScktComp.hpp>
#include <jpeg.hpp>


- La siguiente función:
Código:
bool DescargarImagenJpeg(const String& servidor, const String& archivo,
TImage* image)
{
std::auto_ptr<TClientSocket> socket(new TClientSocket(0));
socket->Host = servidor;
socket->ClientType = ctBlocking;
socket->Port = 80;
socket->Open();
if (socket->Active)
{
socket->Socket->SendText("GET " + archivo
+ " HTTP/1.1\r\nHost: " + servidor + "\r\n\r\n");

int ret = 1;
std::auto_ptr<TStringStream> stream(new TStringStream(""));
while (socket->Active && ret > 0)
{
Application->ProcessMessages();
char szBuffer[1024];
// En el primer paquete que recibimos tenemos información
// sobre el tamaño en bytes de la imagen, entre otros
// datos con lo que podriamos poner una barra de progreso...
ret = socket->Socket->ReceiveBuf(szBuffer, sizeof(szBuffer));
stream->Write(szBuffer, ret);
}

// Buscamos donde acaba la cabecera que envia el servidor
stream->Position = stream->DataString.Pos("\r\n\r\n") + 3;
// Comprobamos que a continuacion hay una imagen .jpg
if (stream->DataString.SubString(stream->Position+1, 2) == "\xFF\xD8")
{
std::auto_ptr<TJPEGImage> jpeg(new TJPEGImage);
jpeg->LoadFromStream(stream.get());
image->Picture->Assign(jpeg.get());
return true;
}
}
return false;
}

La ventaja de hacerlo así es que no se descarga la imagen a disco, todo se hace en memoria, aunque si quieres una forma más sencilla descargando la imagen a disco fíjate en la función del API "URLDownloadToFile".

_________________
Los problemas mas dificiles tienen las soluciones mas sencillas
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email Visitar sitio web del autor MSN Messenger
Mensaje    Asunto: Responder citando

bien ya e visto el tamaño en el pakete principal, sale mas o menos esto

HTTP/1.1 200 OK
Date: Thu, 09 Sep 2004 19:54:26 GMT
Content-Length: 49444
Content-Type: image/jpeg
Last-Modified: Thu, 02 Sep 2004 10:05:54 GMT

pero al hacer una velocidad de transferencia con una adsl de 256 me pilla a 0,5 Kb/seg y a 0,33 y los calculos estan bien pues tarda bastante... porque no me baja a 25Kb ????...o al menos a 10 nose
_________________
Los problemas mas dificiles tienen las soluciones mas sencillas
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email Visitar sitio web del autor MSN Messenger
Mostrar mensajes de anteriores:   
Cambiar a:  
No puedes publicar temas nuevos en este foro
No puedes responder a temas en este foro
No puedes editar tus mensajes en este foro
No puedes borrar tus mensajes en este foro
No puedes votar en las encuestas de este foro


Hosting WordPress Indedmedia desde 3,99 €
© 2002–2026 Club Builder · Funciona con phpBB.