Gravar imagem

2 respostas
P

Como gravar imagem no Db e recuperar a partir de uma página JSP ??? se tiverem um exemplo podem me mandar…

Obrigada. BJS…

2 Respostas

douglasfs

Veja o site: www.javazoom.com, nele tem componentes de download e upload, quando você baixa os arquivos para instalação, eles já vem com alguns exemplos.
No caso do upload você pode grava-lo em memória, banco de dados, arquivo zip, ou no próprio disco.

N

Para upload, realmente você vai precisar de um componente apropriado.

Para gravar na base, você pode utilizar o tipo Blob associado a um PreparedStatement, você precisa conhecer manipulação de Stream.

Para recuperar da base, novamente você vai usar Blob e ResultSet.

Utilizei SQL Server para um exemplo que fiz a um tempo atrás:

Para gravar:

package jdbc;

import java.sql.*;
import java.io.*;

public class BlobInsert 
{
    public static void main(String[] args) 
    {
        try
        {
            if (args.length < 1)
            {
                System.out.println("Escolha o nome do arquivo a ingerir");
                return;
            }

            File fileDesc = new File(args[0]);
            InputStream file = new FileInputStream(fileDesc);

            Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver"); 
            Connection conn = DriverManager.getConnection 
              ("jdbc:microsoft:sqlserver://direct_w2k:1433;User=sa;Password=;DatabaseName=dbTeste;Database=dbTeste"); 

            PreparedStatement ps = conn.prepareStatement("insert into Anexo (filename, content) values (?, ?)");
            ps.setString(1, args[0]);
            ps.setBinaryStream(2, file, (int) fileDesc.length());
            ps.executeUpdate();

            System.out.println("File saved!");
        }
        catch (Exception e)
        {
            e.printStackTrace(System.out);
        }
    }
}

Para ler do banco:

package jdbc;

import java.sql.*;
import java.io.*;

public class BlobRead 
{
    public static void main(String[] args) 
    {
        try
        {
            if (args.length < 1)
            {
                System.out.println("Escolha o id do arquivo a ler");
                return;
            }

            byte[] buffer = new byte[32*1024]; // Buffer 32 kb

            Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver"); 
            Connection conn = DriverManager.getConnection 
              ("jdbc:microsoft:sqlserver://direct_w2k:1433;User=sa;Password=;DatabaseName=dbTeste;Database=dbTeste"); 

            System.out.println("Connection Ok!");

            PreparedStatement ps = conn.prepareStatement("select id, filename, content from Anexo where id = " + args[0]);
            ResultSet rs = ps.executeQuery();

            if (!rs.next()) {
                System.out.println("ID not found!");
                return;
            }

            String fileName = rs.getString(2);
            InputStream fileBase = rs.getBinaryStream(3);
            OutputStream fileOut = new FileOutputStream(fileName + ".db");
            int bytesLidos = fileBase.read(buffer);
            while (bytesLidos > 0)
            {
                fileOut.write(buffer, 0, bytesLidos);
                bytesLidos = fileBase.read(buffer);
            }
            System.out.println("File extracted!");
        }
        catch (Exception e)
        {
            e.printStackTrace(System.out);
        }
    }
}

Lembre-se que o forum do Guj troca o s de Microsoft por $ (pessoa, essa brincadeira atrapalhou meu código :wink: ). Então se você copiar e colar este exemplo, ele não vai funcionar. É só corrigir onde há Microsoft.

Se precisar de um componente de upload, email-me.

Boa sorte.

Criado 29 de abril de 2003
Ultima resposta 30 de abr. de 2003
Respostas 2
Participantes 3