2009-07-14 5 views
0

J'ai une webapp java qui doit télécharger des fichiers via http, puis les stocker sur le serveur. Les fichiers doivent être associés à des enregistrements spécifiques dans une base de données Oracle, il y aura donc une table dans la base de données stockant la référence à l'enregistrement associé et une référence au fichier, avec d'autres données descriptives telles que le titre, etc. pour cette table semblent être:Comment écrire un fichier téléchargé sur le disque à l'aide de l'alias de répertoire Oracle et des objets BFILE?

  • stocker le fichier en tant que blob
  • magasin une référence BFILE au fichier
  • stocker une chaîne contenant le chemin du fichier

Nous préférerions pour stocker le fichier en dehors de la base de données, de sorte que nous ne serons pas le stocker comme un BLOB. Les administrateurs de base de données ont indiqué que leur option préférée est de stocker la référence sous forme de fichier BFILE. L'objet oracle.sql.BFILE permet d'accéder à un InputStream pour lire le fichier, mais pas de façon évidente d'y écrire.

Quelle est la meilleure façon d'écrire les données de fichier sur le disque lorsque la seule référence au répertoire de stockage est l'alias d'annuaire Oracle?


Nous avons décidé aussi simple que cela java.io était la meilleure façon d'écrire dans le fichier, ce qui signifie que le répertoire de stockage doit être disponible pour les serveurs d'applications Web en tant que support. Puisque le répertoire était disponible pour la webapp de toute façon, nous avons alors décidé que le BFILE n'était pas nécessaire et juste pour stocker le nom de fichier dans la base de données à la place.

Répondre

1

Selon le Oracle JDBC Developers Guide - 14.6 Working with BFILEs:

  • BFILEs sont en lecture seule. Vous ne pouvez pas insérer de données ou écrire dans un fichier BFILE.
  • Vous ne pouvez pas utiliser JDBC pour créer un nouveau fichier BFILE. Ils sont créés uniquement à l'extérieur.

Il semble donc que vous avez besoin d'un outil distinct/méthode pour télécharger les données dans le répertoire de stockage Oracle, ce qui rend probablement BFILE un mauvais choix pour votre scénario.

1

« Nous préférons stocker le fichier en dehors de la base de données »

Pourquoi? Quels sont vos scénarios de sauvegarde/récupération pour cela? Par exemple, en cas de panne de disque, comment récupéreriez-vous le fichier? Les fichiers sont-ils purement transitoires, vous n'avez donc pas besoin de les conserver? Fondamentalement, le BFILE est un compromis entre le stockage BLOB et le stockage simple d'un chemin dans la base de données. Vous lui écrivez de la même manière que vous le feriez avec un fichier conventionnel, puis vous le rendez disponible pour la lecture dans la base de données. Si votre application Web est exécutée sur un serveur physique différent de la base de données, vous devez disposer d'un emplacement de stockage accessible aux deux boîtes (et des autorisations appropriées pour la lecture/écriture).

+1

Les raisons derrière "Nous préférons stocker le fichier en dehors de la base de données" sont largement discutées dans http://stackoverflow.com/questions/561447/store-pictures-as-files-or-in-the-database -pour une application Web –

Questions connexes