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?

Foi útil?

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:

  1. 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.

  2. 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.

  3. 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.

  4. 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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top