Servlet recebe imagem corrompida

Bom dia pessoal.
Estou fazendo um sistema em flex para receber uma imagem, e salvar no servidor, porem a mesma sempre chega corrompida no mesmo.

Alguem poderia me dar uma ajuda.

o codigo java do servlet e esse.

import java.io.DataInputStream;
import java.io.FileOutputStream;
import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;


public class FileUpload extends HttpServlet {

   private static final long serialVersionUID = 1L;

   public FileUpload() {
   }

   public void doPost(HttpServletRequest request, HttpServletResponse response)
         throws ServletException, IOException {
      doGet(request, response);
   }

   public void doGet(HttpServletRequest request, HttpServletResponse response)
         throws ServletException, IOException {

      String contentType = request.getContentType();
      String diretorio = new String("C:\\img\\");
      String nomeImagem = request.getParameter("nomeImagem");

      try {
         if ((contentType != null) && (contentType.indexOf("multipart/form-data") >= 0)) 
         {
            DataInputStream in = new DataInputStream(request.getInputStream());
            int formDataLength = request.getContentLength();
            byte dataBytes[] = new byte[formDataLength];
            int byteRead = 0;
            int totalBytesRead = 0;

            while (totalBytesRead < formDataLength) 
            {
               byteRead = in.read(dataBytes, totalBytesRead,formDataLength);
               totalBytesRead += byteRead;
            }

            String file = new String(dataBytes);
            
            int lastIndex = contentType.lastIndexOf("=");
            String boundary = contentType.substring(lastIndex + 1,contentType.length());

            int pos;
            pos = file.indexOf("filename=\");
            pos = file.indexOf("\", pos) + 1;
            pos = file.indexOf("\", pos) + 1;
            pos = file.indexOf("\", pos) + 1;

            int boundaryLocation = file.indexOf(boundary, pos) - 4;
            int startPos = ((file.substring(0, pos)).getBytes()).length;
            int endPos = ((file.substring(0, boundaryLocation)).getBytes()).length;

            // Salva no diretorio especificado
            FileOutputStream fileOut = new FileOutputStream(diretorio + nomeImagem);

            fileOut.write(dataBytes, startPos, (endPos - startPos));
            fileOut.flush();
            fileOut.close();
         }
      } catch (Exception e) {
         e.printStackTrace();
      }
   }
}

e o do flex e esse

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="vertical" 
				horizontalAlign="center" verticalAlign="middle" 
				borderColor="#FFFFFF"
				
				viewSourceURL="srcview/index.html">
	
	<mx:TitleWindow id="titleWindow" 
					width="473" height="283"
					title="Upload de Arquivos com Flex"
					showCloseButton="true"
					close="fechar()"  borderColor="#FFFFFF" cornerRadius="15">
		
		<mx:TabNavigator id="tab" width="100%" height="100%" horizontalAlign="center">
			
			<mx:VBox label="Edicao" width="100%" height="100%">
				<mx:Form id="form" width="100%" height="100%">
					
					<mx:FormItem label="Nome da Imagem:" width="100%" required="true">
						<mx:TextInput id="txtNomeImagem" width="100%"/>
					</mx:FormItem>
					
					<mx:FormItem label="Imagem:" width="100%" id="formitem8" horizontalAlign="center" required="true">
						<mx:HBox width="100%" verticalAlign="middle">
							<mx:TextInput width="100%"
										  id="txtImagem"
										  editable="false" enabled="false"/>
							<mx:Button label="Procurar..." click="procuraImg()"/>
						</mx:HBox>
					</mx:FormItem>
				</mx:Form>
			</mx:VBox>
		</mx:TabNavigator>
		
		<mx:ControlBar verticalGap="0">
			<mx:HBox width="100%" verticalAlign="middle" horizontalAlign="center">
				<mx:Label text="Por: Rodrigo Fraga" fontWeight="bold"/>
				<mx:Spacer width="100%" height="100%"/>
				<mx:Button id="btSalvar" label="Salvar"  
						   enabled="true" click="fazerUpload()" toolTip="Salva o Formulario de Cadastro." width="100" height="30"/>
				
				<mx:Button id="btLimpar" label="Limpar" toolTip="Limpa o Formulario." 
						   width="100" click="setDefault()" height="30"/>
			</mx:HBox>
		</mx:ControlBar>
		
	</mx:TitleWindow>
	
	<mx:Script>
		<![CDATA[
			import flash.net.navigateToURL;
			import mx.controls.Alert;
			
			private var fileImagem:FileReference;
			
			private function fechar():void
			{
				navigateToURL(new URLRequest("javascript:window.close()"), "_self");
			}
			
			public function setDefault():void
			{
				txtNomeImagem.text = "";
				txtImagem.text     = "";
				txtNomeImagem.setFocus();
			}
			
			/**
			 * Fun��es para Upload
			 */
			public function procuraImg():void 
			{
				fileImagem = new FileReference();
				
				//Ao Selecionar....
				fileImagem.addEventListener(Event.SELECT,
					function(event:Event):void 
					{
						txtImagem.text = fileImagem.name;
					} 
				);
				
				//Enquanto estiver fazendo o Upload..
				fileImagem.addEventListener(ProgressEvent.PROGRESS,
					function(event:ProgressEvent):void 
					{
						var numPerc:Number = Math.round((Number(event.bytesLoaded) / Number(event.bytesTotal)) * 100);
						titleWindow.status = "Carregando Imagem..."+numPerc+"%";
					} 
				);
				
				//Ao ocorrer um erro.....
				fileImagem.addEventListener(IOErrorEvent.IO_ERROR, 
					function(event:IOErrorEvent):void 
					{
						currentState = "";
						Alert.show("Ocurreu um erro ao Realizar o Upload \
							Detalhes: "+event.text);
					}
				);
				
				//Ao Terminar o Upload.....
				fileImagem.addEventListener(Event.COMPLETE, 
					function(event:Event):void 
					{
						fileImagem = null;
						titleWindow.status = "Upload efetuado com sucesso!"
						setDefault();
					}
				);
				
				//utilizando filtro para upload somente de imagem 
				var tipos:FileFilter = new FileFilter("Arquivos de Imagem *.jpg; *.jpeg; *.gif; *.png"
					,"*.jpg; *.jpeg; *.gif; *.png");
				var tiposArray:Array = new Array(tipos);
				fileImagem.browse(tiposArray);
			}
			
			public function fazerUpload():void 
			{
				if (txtImagem.text != "" || fileImagem != null)
				{
					//aproximadamente 1MB.
					if (fileImagem.size <= 1048576)
					{
						//Endereco onde esta o aquivo php, ou java.
						//var request:URLRequest = new URLRequest("FileUpload.java");
						
					
						var request:URLRequest = new URLRequest("http://187.92.84.237:8080/Servlets/FileUpload");
						
						var vars:URLVariables  = new URLVariables();
						
						vars.nomeImagem = txtNomeImagem.text+fileImagem.type;
						request.data = vars;
						request.method = URLRequestMethod.GET;
						fileImagem.upload(request);   
					}
					else
					{
						titleWindow.status = "Selecione uma Imagem com no maximo 1Mb";
					}
				}
				else
				{
					titleWindow.status = "Selecione uma Imagem";    
				}
			}
		]]>
	</mx:Script>
	
</mx:Application>

Na verdade, sempre falta 2kb.

pensei em muda o tomcat para glassfish, mais falarao que o tomcat e bom