Il y a plusieurs méthodes pour le faire.Je vais vous en présenter deux : avec un formulaire ou avec une url.Dans cet article, je n'aborderai pas la question sur les batchs car ,dans mon cas, cela ne fonctionne pas avec la version GRAILS 2.5.
Une IHM pour importer des fichiers
Si vous avez seulement quelques fichiers à importer manuellement, le plus simple est de réaliser un formulaire.
Exemple de formulaire form.gsp
Dans ce formulaire, on appelle l'action init du controlleur admin.La balise input file avec le paramêtre multiple va permettre d'uploader plusieurs fichiers.
<g:uploadForm action="init" controller="admin">
<form role="form">
<div class="form-group">
<label for="files">Choix du fichier à parser</label>
<input type="file" id="files" name="files[]" multiple>
<p class="help-block">Vous devez choisir un fichier httpd.conf</p>
</div>
<div class="form-group">
<label for="machinename">Nom de la machine</label>
<input type="text" class="form-control" id="machinename" name="machinename" placeholder="....ac-limoges.fr" value="">
</div>
<button type="submit" class="btn btn-info">Submit</button>
</form>
</g:uploadForm>
Controller
Le tableau files[] va contenir tous les fichiers à Importer.Attention au type de file, il s'agit de org.springframework.web.multipart.MultiPartFile et non de java.io.File.Donc par exemple, vous pouvez traiter les fichiers de la manière suivante :
class AdminController {
def init() {
if (request instanceof MultipartHttpServletRequest) {
...
request.getFiles("files[]").each { file ->
log.info("init() file to parse:" + file.originalFilename)
InputStream inputStream = file.inpustream
BufferedReader = new BufferedReader(new InputStreamReader(inputStream))
try {
String ldapUser = EMPTY
String ldapPwd = EMPTY
String ldapHost = EMPTY
String ldapPort = EMPTY
while ((line = br.readLine()) != null) {
...
}
}
}
...
}
}
...
Import de fichier de manière automatique
Une autre façon de faire est d'utiliser une méthode du controlleur.Cela permet d'importer des fichiers automatiquement :
class AdminController {
def reloadData() {
def path = "E:\\projet\\toolprod\\import\\"
log.info("reloadData() Initializing application from httpd.conf files in machine directory ...")
new File(path).listFiles().findAll{
if (it.isDirectory()) {
log.info("reloadData() Machine name ( Directory name ) :" + it.name)
String machineName = it.name
log.debug("reloadData() files list:" + it.listFiles())
for (File f : it.listFiles()) {
...
}
}
...
Ensuite, il vous suffit d'accéder à l'url : http://localhost:8080/appli/admin/reloadData
Après cela, il est facile de faire un curl et de le mettre dans une crontab.
Aucun commentaire:
Enregistrer un commentaire