Código
E LÁ VAMOS NÓS DE NOVO.
FIQUEI 4 DIAS PARA DESCOBRIR COMO FUNCIONA, E COMO O JÁ POSTADO
NOS MEUS OUTROS POSTS NÃO ENCONTREI NADA NA INTERNET DAI EU ME VIREI...
CASO QUEIRA VER MEUS OUTROS POSTS SEGUE ABAIXO O ENDEREÇO:
Envio de email (SMTP) usando INDY - Sem componente visual - SSL - Somente Delphi 2010 :
http://www.planetadelphi.com.br/dica/7504/-envio-de-email-(smtp)-usando-indy---sem-componente-visual---ssl---somente-delphi-2010-
Boleto - Codigo de Barras e Linha Digitavel - Delphi 7 :
http://www.planetadelphi.com.br/dica/7300/-boleto---codigo-de-barras-e-linha-digitavel---delphi-7-
Ping Delphi7 com IdIcmpClient:
http://www.planetadelphi.com.br/dica/7284/-ping-delphi7-com-idicmpclient-
Envio de email (SMTP) usando INDY - Sem componente visual - SSL :
http://www.planetadelphi.com.br/dica/7280/-envio-de-email-(smtp)-usando-indy---sem-componente-visual---ssl-
VOU INDICAR COMO SE FAZ UPLOAD DE ARQUIVO VIA WEB SERVER APPLICATION, TESTEI OS FONTES VIA ISAPI (*.DLL) E VIA CGI STAND-ALONE (*.EXE) E FUNCIONOU PERFEITAMENTE.
VAMOS DO COMEÇO, LEMBRANDO QUE EU NÃO VOU DAR DICAS DE HTML, VOU POSTAR SOMENTE O QUE PRECISA PARA QUE FUNCIONE, E
LEMBRANDO SEMPRE QUE EU POSTO O QUE JÁ ESTÁ EM PRATICA NOS MEUS FONTES, POR ESTE MOTIVO ELES FUNCIONAM:
O FORMULÁRIO DO HTML DEVE CONTER A SEGUINTE SINTAXE:
<form enctype="multipart/form-data" method="post" runat="server" action="../appweb.exe/sobe_arq" name="f_envio">
REPARE NA OPÇÃO [enctype="multipart/form-data"] SE NÃO FOR DECLARADA NÃO FUNCIONA!!!!
SEGUE ABAIXO AS FUNCÕES PARA RESGATAR OS VALORES DO UPLOAD:
EXPLICAÇÃO:
// RETORNA OS VALORES DE CAMPOS DOS FORMULARIOS, DO TIPO TEXTFIELD POR EXEMPLO
function ValorCampoMultipartFormData(const Content: String; Chave,
NomeCampo: String): String;
// RETORNA O VALOR DO NOME DO ARQUIVO ENVIADO PELO USUARIO FINAL, ELA NÃO RETORNA O CAMINHO, SOMENTE O VALOR
function NomeOriginalArqMultipartFormData(const Content: String; Chave: String): String;
// RETORNA O ARQUIVO EM UMA STRNG GIGANTESCA, SE FOR O CASO DE ARQUIVO ZIP POR EX.
function ValorArquivoMultipartFormData(const Content: String; Chave, TipoArquivo: String): String;
}
function ValorCampoMultipartFormData(const Content: String; Chave,
NomeCampo: String): String;
Var
S : String;
begin
// NO HTML INFORMAR: <form enctype="multipart/form-data" method="post" runat="server" action="[ACTION QUE PROCESSARÁ ESTE CODIGO]">
// REPARE NA OPÇÃO ENCTYPE="MULTPART/FORM-DATA" METHOD="POST" ELA QUE IRÁ PASSAR A INFORMAÇÃO DO ARQUIVO DE UPLOAD, SEM ELA O HTML NÃO ENVIA O ARQUIVO PARA A MEMORIA DO SERVIDOR
// Content => PASSAR O VALOR DE REQUEST.CONTENT;
// Chave => PASSAR O VALOR DE REQUEST.CONTENTFIELDS.STRINGS[0]; // ZERO PORQUE ELE IRÁ RETORNAR NA POSIÇÃO ZERO A CHAVE DE IDENTIFICAÇÃO DAKELE POST
// NomeCampo => NOME DO TEXTFIELD QUE SE DESEJA RESGATAR A INFORMAÇÃO
S := Content;
Delete(S, 1, pos(NomeCampo, S) + length(NomeCampo) + 1);
Result := copy(S, 1, pos(Chave, S) - 2);
end;
function NomeOriginalArqMultipartFormData(const Content: String; Chave: String): String;
Var
S : String;
begin
// NO HTML INFORMAR: <form enctype="multipart/form-data" method="post" runat="server" action="[ACTION QUE PROCESSARÁ ESTE CODIGO]">
// REPARE NA OPÇÃO ENCTYPE="MULTPART/FORM-DATA" METHOD="POST" ELA QUE IRÁ PASSAR A INFORMAÇÃO DO ARQUIVO DE UPLOAD, SEM ELA O HTML NÃO ENVIA O ARQUIVO PARA A MEMORIA DO SERVIDOR
// Content => PASSAR O VALOR DE REQUEST.CONTENT;
// Chave => PASSAR O VALOR DE REQUEST.CONTENTFIELDS.STRINGS[0]; // ZERO PORQUE ELE IRÁ RETORNAR NA POSIÇÃO ZERO A CHAVE DE IDENTIFICAÇÃO DAKELE POST
S := Content;
Delete(S, 1, pos('filename', S) + length('filename') + 1);
Result := copy(S, 1, pos('Content-Type:', S) - 4);
end;
function ValorArquivoMultipartFormData(const Content: String; Chave, TipoArquivo: String): String;
Var
S : String;
begin
// NO HTML INFORMAR: <form enctype="multipart/form-data" method="post" runat="server" action="[ACTION QUE PROCESSARÁ ESTE CODIGO]">
// REPARE NA OPÇÃO ENCTYPE="MULTPART/FORM-DATA" METHOD="POST" ELA QUE IRÁ PASSAR A INFORMAÇÃO DO ARQUIVO DE UPLOAD, SEM ELA O HTML NÃO ENVIA O ARQUIVO PARA A MEMORIA DO SERVIDOR
// Content => PASSAR O VALOR DE REQUEST.CONTENT;
// Chave => PASSAR O VALOR DE REQUEST.CONTENTFIELDS.STRINGS[0]; // ZERO PORQUE ELE IRÁ RETORNAR NA POSIÇÃO ZERO A CHAVE DE IDENTIFICAÇÃO DAKELE POST
// TipoArquivo => PASSAR O VALOR DE REQUEST.CONTENTFIELDS.STRINGS[3]; // RETORNA O VALOR: EX.: "Content-Type: application/octet-stream" - OBS. SEM AS ASPAS
// CASO O VALOR NÃO SEJA DA 3ª STRING, FAÇA UM LOOPING PARA PEGAR O TEXTO "Content-Type:" DENTRO DA OPÇÃO CONTENTFIELDS DO REQUEST
// ContentField2 => PASSAR O VALOR DE REQUEST.CONTENTFIELDS.STRINGS[2]; // RETORNA O VALOR: EX.: [filename="acordosg.sql"] - OBS. SEM AS CHAVES
S := Content;
Delete(S, 1, pos(TipoArquivo, S) + length(TipoArquivo) + 3);
Result := copy(S, 1, pos(Chave, S) - 3);
end;
{
INFORMANDO ESTAS FUNÇÕES NA APLICAÇÃO EU VOU EXPLICAR SOMENTE A VALOR DO ARQUIVO, POIS ELA É A UNICA MAIS CRITICA PARA EXPLICAÇÃO.
COLOQUE UMA NOVA WEBACTION (QUE VAR SER A AÇÃO DO FORMULÁRIO JÁ DESCRITO COM O ENCTYPE)
DECLARE AS VARIAVEIS: }
VAR
F : File;
Arq, LocalArqUpLoad,
ContType : String;
TamArq, TamW, I : Integer;
BEGIN
try
ContType := '';
for i := 0 to Request.ContentFields.Count - 1 do
begin
if pos('Content-Type:', Request.ContentFields.Strings[i]) > 0 then
ContType := Request.ContentFields.Strings[i];
end;
LocalArqUpLoad := 'C:TMP';
Arq := ValorArquivoMultipartFormData(Request.Content, Request.ContentFields.Strings[0], ContType);
TamArq := Length(Arq);
AssignFile(F, LocalArqUpLoad + NomeOriginalArqMultipartFormData(Request.Content, Request.ContentFields.Strings[0]));
Rewrite(F, 1);
for TamW := 1 to TamArq do
begin
BlockWrite(F, arq[TamW], 1);
end;
finally
CloseFile(f);
end;
RESPONSE.CONTENT := 'UPLOAD EFETUADO COM SUCESSO!!!';
HANDLED := TRUE;
END;
{AS OUTRAS FUNÇÕES VÃO SER PASSADAS CONFORME O DESCRITO NA EXPLICAÇÃODE CADA FUNÇÃO
ESPERO TER AJUDADO E VOTEM NA DICA, CASO VOCÊS NÃO TENHAM ENTENDIDO, POR FAVOR NÃO PONTUE O POST COM UM VALOR BAIXO
ATT. FELIPE LEAL
}
Planeta Delphi - www.planetadelphi.com.br - Todos os direitos reservados | Copyright 2001-2009