Hola,
Bueno, para enviar un archivo desde un cliente a un servidor Web usando Indy debes hacer lo siguiente:
1. Crea un módulo de datos (TDataModule)
2. Colocale un componente TidHTTP (está en la pestaña Indy Clients, creada en el IDE de Delphi por la instalación de Indy)
3. Colocale un componente TIdAntiFreeze, en la pestaña Indy Misc. (este solo es para evitar la "congeladas" típicas de internet, no se usa en el envío en sí)
4. Para nuestro ejemplo, llamemos dmWeb al TDataModule e idConexion al TidHTTP.
5. Descarga la unidad llamada MsMultiPartFormData. La puedes descargar en este enlace:
http://www.pudn.com/downloads49/sour...ail166574.html
Esta es una página en chino; probablemente tú navegador te preguntará si quieres instalar caracteres chinos; puedes decirle que no. Verá al tope de la misma el texto "IndyMultipartFormData" y al lado una flecha verde. Usa esa flecha para descargar un punto Zip que contiene un ejemplo del uso de esta unidad; pero lo que interesa es solo la unidad en sí que es muy pequeña.
6. Ahora agrega la unidad MsMultiPartFormData a tú proyecto y a la clausula Uses de tú TDataModule
7. Finalmente crea un método cuya apariencia es la siguiente:
Código Delphi
[-]Procedure TdmWeb.GrabarImagen(ACode,AFileName:String);
Var
TheURL: String;
ResponseStream: TMemoryStream;
MultiPartFormDataStream: TMsMultiPartFormDataStream;
Begin
TheURL := 'http://localhost/MiDirectorio/Miservidor.dll/MiAccion';
MultiPartFormDataStream := TMsMultiPartFormDataStream.Create;
ResponseStream := TMemoryStream.Create;
try
idConexion.Request.ContentType := MultiPartFormDataStream.RequestContentType;
MultiPartFormDataStream.AddFormField('ELCODIGO', ACode);
MultiPartFormDataStream.AddFile('ELARCHIVO', AFileName, 'image/jpg');
MultiPartFormDataStream.PrepareStreamForDispatch;
MultiPartFormDataStream.Position := 0;
idConexion.Post(TheURL,MultiPartFormDataStream, ResponseStream);
finally
MultiPartFormDataStream.Free;
ResponseStream.Free;
end;
End;
Este ejemplo envía una imagen JPG; pero puedes aplicarlo a otros tipos de archivo. Como te podrás dar cuenta. El asunto es solo cosa de cambiar el parámetro 'image/jpg' por el adecuado para tú archivo
Ahora bien, la línea que hace referencia al campo 'ELCODIGO' no es necesaria. La coloco solo para ilustrar el hecho que junto al archivo se pueden enviar otros datos como campos normales. De hecho se pueden enviar varios archivos a la vez. Creo que es claro que agregar un campo es usar un AddFormField y agregar un archivo es usar un AddFile
Lógicamente, el valor "ELARCHIVO" es para dar un nombre al archivo que se envía y el valor AFileName es el nombre de la ruta completa del archivo en el equipo cliente.
Me comentas si necesitas ayuda del lado del servidor
Suerte