Ja encontrei a solução,
Vou compactar usando o ZLib, e depois adicionar o arquivo como anexo no
TIdHTTP e depois descompactar o arquivo recebido via post no PHP.
Abaixo as funções:


Função para comprimir :
procedure TForm2.Comprime(sTexto: TStringList; sArquivo: String);
var
    NewFile: TMemoryStream;

    OutFile : TMemoryStream;
    ZStream : TCompressionStream ;
begin
  NewFile := TMemoryStream.Create;
  try
    sTexto.SaveToStream(NewFile);
    OutFile := TMemoryStream.Create;
    try
      ZStream := TCompressionStream.Create(clMax, OutFile);
      try
        ZStream.CopyFrom(NewFile, 0);
      finally
        ZStream.Free;
      end;
    finally
      OutFile.Seek(0,0);
      OutFile.SaveToFile(sArquivo);
      OutFile.Free;
    end;
  finally
    NewFile.Free;
  end;

end;

--------------------------------------------------------------------
Pegar um arquivo texto normal e compactar usando a função comprime acima :

procedure TForm2.Salva1Click(Sender: TObject);
var
  sTexto : TStringList;
  sArquivo : String;
  sArquivo2 :String;
begin
  sArquivo := 'C:\ENVIA.TEMPISS';
  sArquivo2 := ChangeFileExt(sArquivo, '.zp');// vai salvar o mesmo arquivo
com extençao .zp
  sTexto := TStringList.Create;
  sTexto.LoadFromFile(sArquivo);
  ShowMessage('Tamanho antes de comprimir=' +
intToStr(Length(sTexto.Text)));

  Comprime(sTexto, sArquivo2 );

end;
-------------------------------------------------------------------------------
AGORA SIM ENVIAR O ARQUIVO VIA TIdHTTP

procedure TForm2.Send2Click(Sender: TObject);
var
  data: TIdMultiPartFormDataStream;
  retorno : string;
  NomArq : String;
begin
  data := TIdMultiPartFormDataStream.Create;
  try
    { add the used parameters for the script }
    data.AddFormField('perm', '1');
    data.AddFormField('action', 'envia');
    data.AddFile( 'arquivo', 'C:\ENVIA.zp', 'multipart/mixed' );
    { Call the Post method of TIdHTTP and read the result into TMemo }
    retorno := IdHTTP_ISS.Post('http://localhost/SPDNet/script.php', data);
    showmessage(retorno);
  finally
    data.Free;
  end;
end;

---------------------------------------------------------------------------------------------
EXEMPLO EM PHP DO script.php que recebe o formulario

<?
//ARQUIVO PHP script.php QUE RECEBE O FORMULARIO VIA POST E VAI PEGAR O
ARQUIVO ENVIADO.
//OBS para funcinar as função do Zlib tem que estar abilitado no PHP.ini
$DfAnexo = $_FILES["arquivo"]["name"];
if(empty($DfAnexo)) {
  ECHO "Arquivo de compactação inválido.";
  }      else {

        #Se o anexo for maior que 5 MB, exibe a mensagem de erro abaixo e
termina a execução do script
        if($_FILES["arquivo"]["size"] > 5120000) {

            ECHO"Arquivo  maior que 5MB!";
            exit;
        }

        if(!empty($_FILES["arquivo"]["tmp_name"]) and
is_file($_FILES["arquivo"]["tmp_name"])) {
            if(eregi(".zp$", $_FILES["arquivo"]["name"]) ) {
                #DESCOMPACTA ARQUIVO
                if($file_handle = gzopen($_FILES["arquivo"]["tmp_name"],
"r")){
                   $contents = gzread($file_handle,
filesize($_FILES["arquivo"]["tmp_name"]));
                   $content=gzuncompress($contents);
                    echo $content; //vai mostrar na tela o texto original do
arquivo


            //gzclose($file_name);
          }
            }
            #Se o anexo não tiver uma extensão aceita, exibe a mensagem de
erro abaixo e termina a execução do script
            else {

                echo "Arquivo de compactação inválido.!";
                exit;
            }
        }
        #Se o anexo tiver sido indicado através de um caminho inválido ou
tenha um nome inválido, exibe a mensagem de erro abaixo e termina a execução
do script
        else {

            echo"Arquivo de compactação da Declaração inválido.!";
            exit;
        }
    }

?>

BOM É ISSO

2009/4/7 Reginaldo Donizete Felix <regife...@gmail.com>

> Alguem ai ja trabalhou com compressão de dados no TIdHTTP da Indy, para
> enviar dados via post ?
> Vi que tem uma propriedade do TidHTTP chamada Compressor, onde poderia
> passar os dados comprimidos, mais não sei como trabalhar com isso.
> Tenho um sistema em Delphi que envia uma msg via Post com o TIHTTP e um
> pagina php recebe esse formulario e processa as informaçoes. Só que tenho
> que comprimir antes de enviar depois no php descomprimir de novo. Seria
> isso.
>
> Desde já agradeço pela atenção.
>
>
>
> --
> Reginaldo D. Felix
> regife...@hotmail.com
>



-- 
Reginaldo D. Felix
regife...@hotmail.com


[As partes desta mensagem que não continham texto foram removidas]

Responder a