Guardar Archivos en el Servidor Web ( Tomcat ) o Maquina Cliente, que viajan vía Socket's

Hola que tal

Estoy realizando una practica para la Universidad, esta se trata de una simple tienda de x tipo de artículos esto realmente no tiene importancia lo realmente importantes es ...

Desde una aplicación Servidor que tiene acceso a la Base de Datos que contiene las URL de las imágenes y dimas archivos de cada articulo quiero mandar los archivos por Socket's ( Mas bien es a Fuerza jajaj ), lo deseo mandar a una aplicación web elaborada con Java JSP y demás, el problema que tengo es como acceder a disco de la maquina cliente que obtiene los archivos y demás cosas desde socket's, logro mandar el archivo llega y verifico su tamaño y sus datos pero cuando lo quiero guardar con esta instrucción me lanza una excepción

Con esto Recibo el archivo proveniente del Socket
Donde bis es un flujo de entrada y cl es el socket asociado al flujo de datos
BufferedInputStream bis = new BufferedInputStream(cl.getInputStream());

Con esto lo intento guardar
Donde bos en un flujo de salida
" BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("duke1_1.png")); " intente con muchas URL pero nada

Esta forma de hacerlo la he probado en múltiples ocasiones en aplicaciones de escritorio, pero via web no lo he logrado hacer funcionar ...

Quisiera pedir su ayuda para saber si conocen algún flujo de datos nativo de los Servlets o algo por el estilo que traspase la barrera de seguridad entre la aplicación y el disco del cliente ( Me comentaron que tenia que buscar la forma de acceder a un puerto de Tomcat para acceder a disco pero desconozco la forma de hacerlo o si es viable ), también me comentaron algo de los Web Socket's pero desconozco su implementacion ...

RMI no me es una opción y Web Services tampoco de ante mano muchas gracias por leerme ...

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.

Ya no entendí. Tienes una

Ya no entendí.

Tienes una aplicación servidor con acceso a BD.
Tienes una aplicación web

Donde entra aquí la máquina del cliente? El cliente es el servidor web? Quieres escribir un archivo en el servidor?

No me queda muy claro lo que intentas hacer, pero si pretendes enviar un archivo a una pagina web es esa página web la que tiene que escribir lo que recibe a disco ( o a bd o descartarlo ), no puedes inyectarle archivos arbitrariamente. Imagínate que tu imagen es en realidad un programa para tener el control de la máquina ( aka virus ) , no puedes por métodos "ordinarios" simplemente escribir en su sistema de archivos.

Si lo has hecho desde una aplicación de escritorio es porque el cliente es quién pide el archivo explicitamente y sabe que hacer con él. Pero si el servidor no pide ese archivo pues no puedes forzarlo.

socket | ftp | http multipart | ws

yo entendi que lo que se necesita es:

- Conectarse a un servidor con posibilidad de escribir al filesistem.
- Tener un cliente que pueda (obviamente) conectarse al servidor para enviar archivos.

Pero el canal de envio es libre entre sockets o http (para usar servlets)... Si nos ponemos en un contexto estricto un WS tambien es un servlet y el ftp podria entrar como socket y puedes usar esas opciones. Si quieres manipular el filesistem directamente, el FTP es el adecuado.

Si usas sockets, no te queda mas que usar el flujo de baits.
Si usas el ftp se facilita porque por ejemplo puedes usar apache commons.
Si usas los servlets, tienes que enviar un post a un servlet (con multipart). hace algunos días ezamudio comento acerca de HttpClient de Apache Commons, despues la revise un poco y vi que tiene el soporte para el multipart.
Si usas WS, pues en tu contrato tendrias que definir o el array de bit o un string... El string no es para que mandes el archivo como texto tal cual, pero en unos casos puede (aunque no mucho por el incremento de la longitud del mensaje) ser util.

Bueno ahi hay opciones.