Upload + Srping OK! Como salvar binário no BD?

Bom dia galera!

Estou fazendo upload com Spring MVC, só que eu quero evoluir um pouco, ao invés de upar imagem num diretório e salvar o caminho no bd eu quero salvar o binário dela no bd.

Como eu disse, consegui implementar o upload (achei bem simples ^^), quanto aos métodos e DAO do BD também sem problemas.

Minha dúvida mesmo é só de como armazenar o binário numa variável pra passar por PostgreSql e recuperar esta imagem depois.

Eu ví nas documentações que o método multipartFile.getInputStream() pega o conteúdo da imagem, esse conteúdo é o binário?
Dei um Sysout nele pra debugar mas a impressão saiu como de um obejto: (java.io.FileInputStream@1197971)

Outra coisa, o processo pra imagens e pequenos vídeos é o mesmo? (este exemplo eu fiz com vídeos)

Seguem os trechos das classes que estou utilizando:

Model: VideoUpload.java

public class VideoUpload {	
	 
	private MultipartFile arquivo;
	private int idVideo;
	private String nomeVideo;
	//Getters e Setters
	public MultipartFile getFiles() {
        return arquivo;
    }
    public void setFiles(MultipartFile files) {
        this.arquivo = files;
    }
	public MultipartFile getArquivos() {
		return arquivo;
	}
	public void setArquivos(MultipartFile arquivo) {
		this.arquivo = arquivo;
	}
	//demais getters e setters....
}

VideoController.java

[code]@RequestMapping(value = “/video/savefiles”, method = RequestMethod.POST)
public String uploadVideo(VideoUpload fileUpload,HttpServletRequest request) throws IllegalStateException, IOException {

	  //String saveDirectory = "c:/crunchify/";
	  String saveDirectory = request.getSession().getServletContext().getRealPath("")+"/media/";//Salva no diretório do projeto

	  MultipartFile arquivos = fileUpload.getFiles();		  
	  System.out.println(arquivos.getSize());
 
	  if (null != arquivos && arquivos.getSize() > 0) {	 
		  String fileName = arquivos.getOriginalFilename();
			  if (!"".equalsIgnoreCase(fileName)) {
				// Pega o conteúdo do arquivo - multipartFile.getInputStream()
				  arquivos.transferTo(new File(saveDirectory + fileName));
				  System.out.println(fileName);//AQUI IMPRIME O NOME DO ARQUIVO, VOU IMPLEMENTAR OS RECURSOS DE BD
			  }
	  }
        return "/video";
    }

[/code]

Fico no aguardo.

Abraços!

Você precisará de uma coluna do tipo BLOB. O resto, você acha tranquilamente no google.

Então, o lance do BD eu já vi, o que não estou conseguindo fazer é armazenar esse valor antes de passar pro blob, e depois recuperer ele ,mesmo consultado o google…

Não entendi o que quis dizer com “antes de passar pro blob”. Você vai pegar o array de bytes do upload e jogar na coluna blob, não converte nada.

Isso que quero fazer mas não consigo, pode me dar um exemplo de como pegar esses dados? é através do método que citei (multipartFile.getInputStream() )?

Camarada, não vem com esse papo de “pode me dar um exemplo”. Eu nem vou pesquisar no google, por que sei que se eu pesquisar, encontrarei muitos exemplos.
Então, poupe o meu e o teu tempo e faça essa pesquisa, pegue três ou quatro exemplos e tente fazer.

[quote=drsmachado]Camarada, não vem com esse papo de “pode me dar um exemplo”. Eu nem vou pesquisar no google, por que sei que se eu pesquisar, encontrarei muitos exemplos.
Então, poupe o meu e o teu tempo e faça essa pesquisa, pegue três ou quatro exemplos e tente fazer.[/quote]

Afff!!!
Caraca véio!Não sou sangue suga, só entro aqui quando não consigo mesmo,estou falando que pesquisei é porque pesquisei, se não rodou ou não entendi é outros quinhentos, não vou esticar o assunto.
Embora não o obriguei a nada, você respondeu porque quis eu peço desculpa por fazer “você perder seu tempo”.
Não precisa perder “mais tempo pesquisando nada pra mim” , vai fazer o que você acha que é mais produtivo.

Obrigado!

[quote=Ailton_Occhi][quote=drsmachado]Camarada, não vem com esse papo de “pode me dar um exemplo”. Eu nem vou pesquisar no google, por que sei que se eu pesquisar, encontrarei muitos exemplos.
Então, poupe o meu e o teu tempo e faça essa pesquisa, pegue três ou quatro exemplos e tente fazer.[/quote]

Afff!!!
Caraca véio!Não sou sangue suga, só entro aqui quando não consigo mesmo,estou falando que pesquisei é porque pesquisei, se não rodou ou não entendi é outros quinhentos, não vou esticar o assunto.
Embora não o obriguei a nada, você respondeu porque quis eu peço desculpa por fazer “você perder seu tempo”.
Não precisa perder “mais tempo pesquisando nada pra mim” , vai fazer o que você acha que é mais produtivo.

Obrigado![/quote]

http://www.java2s.com/Code/Java/Database-SQL-JDBC/InsertpicturetoMySQL.htm

e olha, o drsmachado tem toda a razão, achei isso pesquisando esta frase no google: “inserting blob java”…

e não é por mal, mas essa pesquisa inicial é essencial.

ai você testa o código se der problema ou se tiver dúvida ai é outra história.

douglaskd

Obrigado pelos links, eu também não respondi por mal, ele poderia ser um pouco menos desagradável só… mas tudo bem.

Vamos lá.

Assim como outros que pesqusei estes 3 Links mostram algo que eu já ví, e talvez eu não tenha sido feliz na minha questão, ou realmente não entendi.

Observe que lá em cima eu descrevi que estou fazendo o uplod corretamente mas não quero mais upar imagem em nenhum diretório, descrevi também que já insiro dados no bd e etc…não tenho dúvidas do tipo de campo ou de como inserir dados e etc.

No código que eu postei, eu estou fazendo o upload da imagem pra uma pasta usando spring certo? então, eu não quero isso,não quero salvar a imagem em pasta nenhuma, eu gostaria de pegar o binario dela diretamente enviar para o DB, isso é possível?

Quando pedi um exemplo, era só pensando onde eu poderia setar um variavel no código que postei, ou modificar o trecho do multipartFile.getInputStream().

Estes 3 links estão pedindo o caminho/nome da imagem (File file = new File(“myPhoto.png”):wink: ou seja, a imagem tem que estar e um diretório certo? ou não?

Conforme eu li o método multipartFile.getInputStream() pega o conteúdo do arquivo, eu achei que esse conteúdo que ele pega fosse o binário , eu gostaria de descarregar esse binário numa variável pra aí sim passar para o BD.

Na linha abaixo eu salvo a imgem no diretório, eu consigo deixar de usa-la pegar esse conteúdo que iria salvar na pasta e passar direto pro BD?

Acho que vou reescrever o código na íntegra (já virou maior bagunça dos teste que fiz) e posto ele mostrando onde quero o que…

Desculpem minha ignorancia, parece ser uma coisa simples, mas ainda não consegui,

Abraços.

Eu penso da seguinte forma, “Nós fazemos o conteúdo do Google”.
Outras pessoas vão pesquisar no Google e podem cair aqui, e realmente muitas vezes não encontramos exatamente o que queremos,
as vezes esta de baixo do nosso nariz, mas não entendemos. Então vamos ter mais paciencia, por favor.

Acredito, que o que voce precisa é mais ou menos isso:

PreparedStatement ps;

psIguala.setBinaryStream(iIndexdaColunaBlob, multipartFile.getInputStream());

Isso dara certo se o metodo retornar um java.io.InputStream, ou tente fazer um Cast.
Não utilizo Spring, mas não deve mudar muito.