Pessoal, na boa, o cara quer saber como gravar Imagem no banco. E se
ele estiver desenvolvendo um aplicativo pra gravar imagens de arquivos
de processos penais? E se o chefe dele acha mais seguro deixar as
imagens no banco? Bom Daniel, então vou dar pra vc um exemplo que uso
aquí e que resolve. vou colar trechos do cód e vc mastiga aí.
primeiro vc precisa usar um FileReference:
private var arquivoUpload:FileReference = new FileReference();
depois vc faz um handler pro seu botão e pros eventos que vc precisa
tratar, se quiser faça um filtro:
private function handleBtnBuscarImagem(evt:MouseEvent):void {
var filtroExts:FileFilter = new FileFilter(".::SaibWeb::. (" +
"*.gif, *.jpg, *.jpeg, *.png)",
"*.gif;*.jpg;*.jpeg;*.png");
arquivoUpload.addEventListener(Event.SELECT, onUpFileSelected);
arquivoUpload.addEventListener(Event.CANCEL, onUpCancel);
arquivoUpload.addEventListener(IOErrorEvent.IO_ERROR, onUpIOError);
arquivoUpload.addEventListener(SecurityErrorEvent.SECURITY_ERROR,
onUpSecurityError);
arquivoUpload.browse([filtroExts]);
}
private function onUpFileSelected(evt:Event):void{
cmpCanvasUpload.alpha = 0.9;
_cnvImagens.addChild(cmpCanvasUpload);
if((arquivoUpload.size/1024) <= (10240)){//limite máximo: 10Mb
try {
cmpCanvasUpload.addChild(msgUpload);
cmpCanvasUpload.addChild(progressBar);
cmpCanvasUpload.addChild(btnCancelUpload);
arquivoUpload.addEventListener(ProgressEvent.PROGRESS,
onUpProgress);
arquivoUpload.addEventListener(Event.COMPLETE,
onUpComplete);
var params:URLVariables = new URLVariables();
params.appOrigem = "FrmCadProdutos";
params.idEmpresaPvda = idEmpresaPvda;
params.flgImgDefault = "N";
params.idProduto = objeto.Codigo;
var request:URLRequest = new URLRequest();
request.url = FILE_UPLOAD_URL;
request.method = URLRequestMethod.POST;
request.data = params;
arquivoUpload.upload(request);
} catch (err:Error) {
msgUpload.text = "ERRO: zero-byte file";
cmpCanvasUpload.addChild(msgUpload);
}
}
else{
arquivoUpload.cancel();
btnCancelUpload.enabled = false;
_cnvImagens.removeChild(cmpCanvasUpload);
Funcoes.mensagem("O arquivo selecionado excede o tamanho máximo
permitido de 10Mb.", "E", null);
}
}
e pra facilitar minha vida, vou só colocar trechos e vc vê aí.
private function onUpProgress(evt:ProgressEvent):void{
var nf:NumberFormatter = new NumberFormatter();
nf.rounding = "up";
nf.precision = 0;
nf.useThousandsSeparator = false;
msgUpload.text = "Carregando
"+nf.format(evt.bytesLoaded/1024)+" de
"+nf.format(evt.bytesTotal/1024)+" Kb.";
progressBar.setProgress(evt.bytesLoaded,
evt.bytesTotal);
}
private function onUpCancel(evt:Event):void{
arquivoUpload.cancel();
msgUpload.text = "Upload cancelado pelo usuário.";
progressBar.label = "Cancelado";
btnCancelUpload.enabled = false;
var timer:Timer = new Timer(1000);
timer.addEventListener(TimerEvent.TIMER,
function(e:TimerEvent):void{
try{
_cnvImagens.removeChild(cmpCanvasUpload);
}
catch(e:Error){}
timer.stop();
});
timer.start();
}
private function onUpComplete(evt:Event):void{
var nf:NumberFormatter = new NumberFormatter();
nf.rounding = "up";
nf.precision = 0;
nf.useThousandsSeparator = false;
msgUpload.text = "Upload concluído em um total de
"+nf.format(arquivoUpload.size/1024)+"Kb.";
progressBar.label = "Concluído";
btnCancelUpload.enabled = false;
var timer:Timer = new Timer(3500);
timer.addEventListener(TimerEvent.TIMER,
function(e:TimerEvent):void{
try{
_cnvImagens.removeChild(cmpCanvasUpload);
}
catch(e:Error){}
timer.stop();
});
timer.start();
getProdutoImagens();
}
private function onUpIOError(evt:IOErrorEvent):void{
Funcoes.mensagem("IOError ~= line
1226\n"+evt.toString(), "E",
null);
_cnvImagens.removeChild(cmpCanvasUpload);
cmpCanvasUpload.removeChild(msgUpload);
cmpCanvasUpload.removeChild(progressBar);
}
private function onUpSecurityError(evt:SecurityErrorEvent):void{
Funcoes.mensagem("SecurityError ~= line
1233\n"+evt.text, "E",
null);
_cnvImagens.removeChild(cmpCanvasUpload);
cmpCanvasUpload.removeChild(msgUpload);
cmpCanvasUpload.removeChild(progressBar);
}
a sua url no servidor
private const FILE_UPLOAD_URL:String = "http://seu_ip:sua_porta/
uploadDocumentos.ashx";
enfim tudo isso provavelmente vc já sabe. agora, o tratamento no
servidor, obviamente, depende sa sua linguagem aí. aquí utilizo C#
dessa forma:
public void UploadImagemProdutos(HttpContext context)
{
OracleCommand comandosql = new OracleCommand();
//recupera os dados do post
string idEmpresaPvda =
context.Request.Form["idEmpresaPvda"].ToString();
string idProduto =
context.Request.Form["idProduto"].ToString();
HttpPostedFile imagem = context.Request.Files["Filedata"];
//configura o diretório de upload temporário
string uploadDir = HttpContext.Current.Server.MapPath("~/
upload/temp/" + idEmpresaPvda);
//cria o titetório temporário, caso não exista
try { System.IO.Directory.CreateDirectory(uploadDir); }
catch (Exception) { throw; }
//grava na pasta temporária
try { imagem.SaveAs(Path.Combine(uploadDir,
imagem.FileName)); }
catch (Exception) { throw; }
//redimensiona a imagem se necessário
//(substituindo a imagem criada acima. tamanho padronizado
no parâmetro da função)
try { redimensionarImagem(Path.Combine(uploadDir,
imagem.FileName), Path.Combine(uploadDir, imagem.FileName)); }
catch (Exception) { throw; }
using (comandosql.Connection = ConexaoBD.ObterConexao())
{
try
{
FileStream fsImagem = new FileStream(uploadDir +
"/" + imagem.FileName, FileMode.Open, FileAccess.Read);
byte[] blob = new byte[fsImagem.Length];
fsImagem.Read(blob, 0,
System.Convert.ToInt32(fsImagem.Length));
fsImagem.Close();
comandosql.CommandText = "INSERT INTO
PVDA.PRODUTO_IMAGENS(PROIMG_PROD_EMP_ID " +
",PROIMG_PROD_ID " +
",PROIMG_IMAGEM) " +
"VALUES (" + idEmpresaPvda +
"," + idProduto +
", :BlobImagem)";
OracleParameter blobParameter = new
OracleParameter();
blobParameter.OracleDbType = OracleDbType.Blob;
blobParameter.ParameterName = "BlobImagem";
blobParameter.Value = blob;
comandosql.Parameters.Add(blobParameter);
comandosql.CommandType = CommandType.Text;
comandosql.ExecuteNonQuery();
File.Delete(Path.Combine(uploadDir,
imagem.FileName));// deleta o arquivo temporário
}
catch (Exception)
{
throw;
}
}
}
public static void redimensionarImagem(string srcPath, string
destPath, double nWidth = 235, double nHeight = 145){
string temp;
// abre arquivo original
System.Drawing.Image img =
System.Drawing.Image.FromFile(srcPath);
int oWidth = img.Width; // largura original
int oHeight = img.Height; // altura original
double ratio;
//calcula a proporcionalidade da imagem
if(oWidth > oHeight){
ratio = nWidth / oWidth;
nHeight = oHeight * ratio;
} else {
ratio = nHeight / oHeight;
nWidth = oWidth * ratio;
}
// redimensiona se necessario
if(oWidth > nWidth || oHeight > nHeight){
if(oWidth > oHeight){ nHeight = (oHeight * nWidth) /
oWidth; }
else{ nWidth = (oWidth * nHeight) / oHeight; }
}
else return;
// substitui a imagem no servidor pela imagem
redimensionada...
System.Drawing.Image imgThumb =
img.GetThumbnailImage(Convert.ToInt32(nWidth),
Convert.ToInt32(nHeight), null, new System.IntPtr(0));
if(srcPath == destPath){
temp = destPath + ".tmp";
imgThumb.Save(temp, ImageFormat.Jpeg);
img.Dispose();
imgThumb.Dispose();
File.Delete(srcPath); // deleta arquivo original
File.Copy(temp, srcPath); // copia a nova imagem
File.Delete(temp); // deleta temporário
}
else{
imgThumb.Save(destPath, ImageFormat.Jpeg); // salva
nova imagem no destino
imgThumb.Dispose(); // libera memoria
img.Dispose(); // libera memória
}
}
como vê, o campo no banco é um blob. não repara na falta de
explicação, é que tenho que correr. o código está bem comentado.
--
Você recebeu esta mensagem porque está inscrito na lista "flexdev"
Para enviar uma mensagem, envie um e-mail para [email protected]
Para sair da lista, envie um email em branco para
[email protected]
Mais opções estão disponíveis em http://groups.google.com/group/flexdev