Muito obrigado a todos pela atenção e a vc Leonardo Oliveira.. agora tenho uma luz para seguir, vou estudar se código para resolver meu problema que é assim, eu gero um QR Code... e nesse QR Code tem um código... então quero salvar essa imagem gerada no banco de dados... por que depois para gerar relatórios é pelo código que está na imagem gravada no banco eu vou listar o resto das informações num grid. Desculpem se fui sucinto na minha primeira explicação.
Obrigado. On Dec 26, 1:43 pm, Leonardo Oliveira <[email protected]> wrote: > 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
