 |
Club Builder Foro de C++Builder en español
|
| Ver tema anterior :: Ver tema siguiente |
| Autor |
Mensaje |
Fernando Diaz Master


Registrado: 18 Jul 2004Mensajes: 273Ubicación: Talavera de la Reina (Toledo)
|
Publicado: Mie 08 Sep, 2004 6:28 pm Asunto: Descarga de archivo de internet con Pause y % no entiendo |
|
|
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 |
|
 |
Fernando Diaz Master


Registrado: 18 Jul 2004Mensajes: 273Ubicación: Talavera de la Reina (Toledo)
|
Publicado: Jue 09 Sep, 2004 8:45 pm Asunto: |
|
|
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 |
|
 |
|
|
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
|
© 2002–2026 Club Builder · Funciona con phpBB.
|