Le recomiendo encarecidamente que use uno de los módulos existentes que la gente ha creado para el manejo de carga de archivos de varias partes. Commons Fileupload es uno de los más populares, le sugiero que lo investigue (ejemplo de uso aquí ).
Su código es bastante desordenado y está mezclando el trabajo con matrices de bytes y cadenas de una manera que seguramente creará errores. esto:
int boundaryLocation = file.indexOf(boundary, pos) - 4;
int startPos = ((file.substring(0, pos)).getBytes()).length;
int endPos = ((file.substring(0, boundaryLocation)).getBytes()).length;
...
fileOut.write(dataBytes, startPos, (endPos - startPos));
es particularmente peludo. De todos modos, si insiste en hacerlo usted mismo, debe limpiar su código, no mezcle el trabajo con cadenas y matrices de bytes (recuerde, un carácter en una cadena no es necesariamente solo un byte). Sin embargo, no lo recomiendo, a menos que sea una experiencia de aprendizaje para usted. En cuyo caso, dedicaría algo de tiempo a tratar de encontrar algún código de ejemplo en Internet para el manejo de formularios de varias partes.