Question

J'essaie de télécharger une image sur MySQL en utilisant Play Framework2.

Dans Play Framework 1.24, j'utilise "play.db.jpa.Blob" et "multipart/form-data" pour télécharger une image sur MySQL.

Mais dans le cadre de jeu 2, il n'y a pas Blob...Comment puis-je télécharger l'image en utilisant "multipart/form-data" vers MySQL ?

Était-ce utile?

La solution

Vous devez définitivement pas stockage vos fichiers dans une base de données. C'est une mauvaise idée. Au lieu de cela, vous devez télécharger vos fichiers sur un système de fichiers local ou distant et enregistrer uniquement le nom de fichier / fichier de fichier dans votre base de données.

EDIT: Depuis ma réponse, je vais essayer de donner un peu plus d'explication:

  1. Tout d'abord, lorsque vous travaillez avec des types de blob dans le cadre de lecture, il créera un champ de blob dans votre base de données. Mais toutes les bases de données n'ont pas la même mise en œuvre derrière le type BLOB. Dans certains RDM, le type de blob aura un stockage limité et dans d'autres (telles que MySQL), la taille maximale de votre champ de blob sera déterminée par configuration.

  2. Deuxièmement, lorsque vous récupérez vos fichiers de la base de données et que vous les envoyez à l'utilisateur, votre utilisation de la mémoire va exploser. Très simplement parce que, joue, chargez le champ Blob dans la mémoire avant de l'envoyer à l'utilisateur.

  3. Plus, si vous avez beaucoup de fichiers stockés dans votre base de données, il sera surchargé très rapidement. (Demandes). Vous déplacez la base de données sur une nouvelle machine. Mais si vous avez beaucoup de données stockées, votre prochain goulot d'étranglement pourrait ne pas être la base de données, mais la bande passante entre votre application et le serveur de base de données.

  4. L'utilisation d'une base de données pour le stockage de fichiers sera toujours plus lente et consommer plus de mémoire que la lecture directe de systèmes de fichiers en raison de la surcharge créée par la base de données.

    Utilisation de votre base de données en tant que moteur de stockage de fichiers est une solution facile et rapide à configurer, mais elle est remplie d'espèces qui pourraient vraiment changer les choses plus tard pendant votre projet.

Autres conseils

Autre moyen, vous pouvez enregistrer une référence à la photo dans la base de données.

Vue:
<form action="@routes.Application.index" method="POST" enctype="multipart/form-data">
           Photo<input type="file" name="photo"> <br>
             <input type="submit" value="Submit">    
</form>

dans le contrôleur:

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
            }
}

C'est ce que l'objet blob gère transparent.Il stocke le fichier dans le système de fichiers et stocke une référence dans la DB.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top