jogar framework 2 fazer upload de arquivo para mySQL
-
11-12-2019 - |
Pergunta
Estou tentando fazer upload de uma imagem para o MySQL usando o Play Framework2.
Na estrutura de jogo 1.24, eu uso "play.db.jpa.Blob
" e "multipart/form-data"
para fazer upload de uma imagem para o mySQL.
Mas no play framework2 não há Blob
...Como posso fazer upload da imagem usando "multipart/form-data"
para mySQL?
Solução
Você deveria definitivamente não armazenamento seus arquivos para um banco de dados.Isso é uma má ideia.Em vez disso, você deve enviar seus arquivos para algum sistema de arquivos local ou distante e salvar apenas o nome/caminho do arquivo em seu banco de dados.
EDITAR: Como minha resposta foi rejeitada, tentarei dar um pouco mais de explicação:
Primeiramente, ao trabalhar com tipos de Blob no framework Play, ele criará um campo BLOB em seu banco de dados.Porém, nem todos os bancos de dados têm a mesma implementação por trás do tipo blob.Em alguns RDMS, o tipo Blob terá armazenamento limitado e em outros (como MySQL) o tamanho máximo do seu campo blob será determinado pela configuração.
Em segundo lugar, quando você recupera seus arquivos do banco de dados e os envia ao usuário, o uso de memória vai explodir.Muito simplesmente porque o Play carrega o campo blob na memória antes de enviá-lo ao usuário.
Além disso, se você tiver muitos arquivos armazenados em seu banco de dados, ele ficará sobrecarregado muito rapidamente.(solicitações de).Seu próximo passo será mover o banco de dados para uma nova máquina.Mas se você tiver muitos dados armazenados, seu próximo gargalo poderá não ser o banco de dados, mas a largura de banda entre seu aplicativo e o servidor de banco de dados.
Usar um banco de dados para armazenamento de arquivos sempre será mais lento e consumirá mais memória do que a leitura direta do sistema de arquivos devido à sobrecarga criada pelo banco de dados.
Usar seu banco de dados como mecanismo de armazenamento de arquivos é uma solução fácil e rápida de configurar, mas está cheia de inconvenientes que podem realmente mudar as coisas posteriormente durante seu projeto.
Outras dicas
Outra forma, você pode armazenar referências à foto no banco de dados.
Em vista:
<form action="@routes.Application.index" method="POST" enctype="multipart/form-data">
Photo<input type="file" name="photo"> <br>
<input type="submit" value="Submit">
</form>
No controlador:
MultipartFormData body = request().body().asMultipartFormData();
FilePart photo = body.getFile("photo");
if (photo != null) {
String fileName = photo.getFilename();
File file = photo.getFile();
File newFile = new File(play.Play.application().path().toString() + "//public//uploads//"+ "_" + fileName);
file.renameTo(newFile); //here you are moving photo to new directory
System.out.println(newFile.getPath()); //this path you can store in database
}
}
Isto é o que o objeto Blob trata de forma transparente.Ele armazena o arquivo no sistema de arquivos e armazena uma referência no banco de dados.