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>