Convertir des fichiers PDF en Base64 et de stocker des données BLOB de la Base de données
Je veux données binaires (par exemple, un fichier PDF) dans une GOUTTE de ma base de données Oracle.
Au début, j'ai mis le fichier PDF en un FileInputStream et créé un tableau d'octets.Voici le code pour que:
public static byte[] createByteArray(File pCurrentFolder, String pNameOfBinaryFile)
{
String pathToBinaryData = pCurrentFolder.getAbsolutePath()+"/"+pNameOfBinaryFile;
File file = new File(pathToBinaryData);
if (!file.exists())
{
System.out.println(pNameOfBinaryFile+" could not be found in folder "+pCurrentFolder.getName());
return null;
}
FileInputStream fin = null;
try {
fin = new FileInputStream(file);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
byte fileContent[] = new byte[(int) file.length()];
try {
fin.read(fileContent);
} catch (IOException e) {
e.printStackTrace();
}
return fileContent;
}
J'ai envoyé ce (le tableau d'octets) par l'intermédiaire de MyBatis à la base de données et il a travaillé, de sorte que j'ai eu le PDF dans mon BLOB et j'ai aussi pu lire le fichier PDF à partir de ma base de données.
Mais maintenant, je suis face au problème suivant:
J'ai un Connecteur JDBC pour mon moteur de recherche (ESP RAPIDE...mais que dowsnt importe) qui se connecte à une certaine base de données et stocke le contenu d'un fichier xml. À l'intérieur de ce fichier xml est un élément appelé "data" qui contient les données binaires à l'intérieur de son CDATA Champ.
Quand je veux analyser ce xml, Java me dit:
The content of elements must consist of well-formed character data or markup.
Avec certains PDF je travaille, mais avec quelques pas. Je pense donc que le problème, c'est que je l'ai stocké dans la base de données dans le mauvais sens.
Pour plus d'informations, je révérence à un autre questions que j'ai posées avant qui est semblable.
Java: sauter des données binaires dans le fichier xml lors de l'analyse
Quelqu'un il m'a dit que je doit coder mon PDF (ou un fichier binaire) avec base64. Donc, cela voudrait dire, je ne viens de mettre mon fichier PDF en un FileInputStream, stocker le byte[] et de mettre ce byte[] à mon BLOB de la base de données.
Que dois-je faire, pour stocker le fichier PDF dans le bon chemin à l'intérieur de ma base de données, de sorte que par la suite je peux analyser correctement mon fichier XML le connecteur JDBC crée?
OriginalL'auteur Metalhead89 | 2012-07-31
Vous devez vous connecter pour publier un commentaire.
Vous pouvez utiliser le JAXB DatatypeConverter classe de convertir facilement vos données en base64, sans dépendances externes:
Vous pouvez simplement ajouter ce code à la fin de votre méthode et de modifier son type de retour d'une Chaîne de caractères.
OriginalL'auteur Mike Deck
Vous pouvez essayer de convertir d'abord les octets à basse64 à l'aide d'Apache Commons comme cet exemple:
byte[] base64String = Base64.encodeBase64URLSafe(fileContent);
fileContent est mon byte[] représentant le contenu binaire du fichier PDF que j'ai stocké dans le BLOB en premier. Maintenant que je me suis converti à base64String (qui est aussi un byte[]) et stockées à l'intérieur de la GOUTTE. Ça marchait aussi, mais maintenant je ne peux pas ouvrir le fichier dans ma base de données. Est-ce correct? Ok je pense que je devrais avoir à décoder à nouveau, mais je ne peux pas faire cela, parce que l'intérieur de la base de données, il y a le vrai fichier qui est ensuite envoyé au moteur de recherche via le connecteur JDBC. Donc je ne peux pas l'utiliser directement. Est-il une autre voie?OriginalL'auteur Lengoman