Podrias revisar el tema de "File Upload" de PHP .. con eso tienes el 80% de tu scritp .. el resto .. una vez hubicado tu archivo en el servidor ahí mismo obtienes el nombre del fichero al cual añades la ruta (si es q fueran diferentes) del destino final ..
La descarga es otro tema .. basicamente de cabeceras HTTP .. Con PHP se envian con header("content-type: formato_MIME");
"File Upload" con PHP (manual oficial).
http://www.php.net/manual/en/features.file-upload.php
Y un tutorial de uso y ejemplo de tu caso concreto:
http://www.phpbuilder.com/columns/william19990908.php3
(El artículo habla de "imagenes" .. pero la misma teoria es aplicable a cualquier archivo binario ... Fijate que usa una llamada al sistema para hacer el "copiar" del archivo subido al servidor a su destino definitivo .. Usa mejor los ejemplos del manual de PHP copy() o mejor move_uploaded_files() ... )
Y .. este articulo hace lo mismo . pero mete el archivo en formato binario en la BD (completo ... No es lo mas optimo .. pero te servirá de ejemplo para las descargas y otros temas ..).
http://www.phpbuilder.com/columns/florian19991014.php3
Un saludo,