Силно ви съветвам да използвате един от съществуващите модули, които хората са изградили за обработка на многочастни файлове. Качване на общи файлове е един от по-популярните, предлагам ви да го разгледате (пример за използване тук ).
Вашият код е доста разхвърлян и вие смесвате работата с байтови масиви и низове по начин, който със сигурност ще създаде грешки. Това:
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));
е особено космат. Както и да е, ако настоявате да го направите сами, трябва да почистите кода си, да не смесвате работата с низове и байтови масиви (не забравяйте, че един знак в низ не е непременно само един байт). Не го препоръчвам обаче, освен ако това не е учебен опит за вас. В този случай бих прекарал известно време, за да се опитам да намеря примерен код в интернет за обработка на формуляри с много части.