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]