Con FTP lo resuelves entonces. Necesitas utilizar algún componente para conectarse al servidor (la pestaña Indy tiene uno), solo lo configuras indicando a que dirección se va a conectar y con una instrucción subes el archivo. Hay muchos ejemplos en la red.
Por el lado del servidor, solo necesitas instalar el software, te recomiendo FileZilla Server, es libre y bastante sencillo de configurar. Recuerda que debes configurar en este software y cualquier otr FTP, al menos un usuario con su contraseña y las carpetas del servidor a donde va a tener acceso ese usuario, que obviamente será tu aplicación.
LO puedes implementar muy sencillamente así:
1.- El cliente escanea su documento
2.- Ya escaneado el documento se envía al servidor FTP (habrá que definir un nombre para él, o bien generar uno aleatorio y que el usuario describa que contiene)
3.- Si todo salió bien y se subió sin problema, grabar en la tabla de la BD el nombre de archivo y la descripcion que le puso el usuario.
Para acceder al archivo hacemos lo contrario:
1.- El cliente consultar la tabla de la BD hasta encontrar su archivo
2.- Al encontrarlo se solicita o descarga dicho archivo mediante FTP utilizando los datos que obtuvimos al consultar la tabla
3.- El usuario lo guarda en forma local
Una ventaja adicional es que puedes tener un servidor para la base de datos y otro distinto para guardar los archivos ya que la conexion FTP no tiene que ser forzosamente al mismo servidor que mantiene la base de datos. Por ejemplo, puedes tener el servidor de BD en una ciudad y los archivos físicos en otra diferente.
Si quieres mas info te pongo un ejemplo de como se hace, esta unidad sube un archivo a un servidor previamente configurado:
Código Delphi
[-]
unit uCFD_FTP;
interface
uses IdFTP;
const FTP_USERNAME = 'usuario';
FTP_PASSWORD = 'password';
procedure CFD_UpLoad(aOrFile,aDestFile:string);
procedure CFD_UpLoadFiles(aXMLOrfile,aXMLDestFile,aPDFOrFile, aPDFDestFile: string);
implementation
procedure CFD_UpLoad(aOrFile,aDestFile:string);
var Servidor: TIdFTP;
begin
Servidor := TIdFTP.Create(nil);
try
Servidor.Passive := TRUE;
Servidor.Username := FTP_USERNAME;
Servidor.Password := FTP_PASSWORD;
Servidor.Host := (poner aqui la IP o direccion del servidor FTP)
Servidor.Connect; Servidor.Put(aOrFile,aDestFile); Servidor.Disconnect;
finally
Servidor.Free;
end;
end;
procedure CFD_UpLoadFiles(aXMLOrfile,aXMLDestFile,aPDFOrFile, aPDFDestFile: string);
var Servidor: TIdFTP;
Begin
Servidor := TIdFTP.Create(nil);
try
Servidor.Passive := TRUE;
Servidor.Username := FTP_USERNAME;
Servidor.Password := FTP_PASSWORD;
Servidor.Host := capadatos.Conexion.HostName;
Servidor.Connect;
Servidor.Put(aXMLOrFile ,aXMLDestFile);
Servidor.Put(aPDFOrFile ,aPDFDestFile);
Servidor.Disconnect;
finally
Servidor.Free;
end;
End;
end.
Con eso ya puedes hacer bastante.