IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

XMLRAD Discussion :

changement de nom de fichier en Upload


Sujet :

XMLRAD

  1. #1
    Membre du Club
    Inscrit en
    Mars 2003
    Messages
    77
    Détails du profil
    Informations forums :
    Inscription : Mars 2003
    Messages : 77
    Points : 55
    Points
    55
    Par défaut changement de nom de fichier en Upload
    Sur mon xmlService UploadForm, l'utilisateur sélectionne son fichier, quand il fait executer, xmlrad va bien me faire le upload dans data\upload .
    Mon souci et que je peut avoir des utilisateurs ayant le fichier de même nom. donc l'idée serait de préfixer le fichier téléchargé par un id (à quoi sert le XMLC_RequestID) et comment faire pour que XMLRAD change le nom du fichier de destination (XMLC_RequestID+file).

    Si on veut créer une arborescence dans upload, je penses qu'il faut modifier XMLC_FileUploadDir, mais en le modifiant, il me stocke les fichiers dans upload, que le repertoire existe ou n'existe pas .

  2. #2
    Membre actif Avatar de Jeweller
    Inscrit en
    Août 2003
    Messages
    357
    Détails du profil
    Informations forums :
    Inscription : Août 2003
    Messages : 357
    Points : 278
    Points
    278
    Par défaut
    Une solution possible est de le faire manuellement en utilisant par exemple SystemMoveFile pour renommer/déplacer le fichier apres avoir extrait son nom initial depuis
    Context.GetValue('XMLC_UploadedFileName').

    Michael

  3. #3
    RDM
    RDM est déconnecté
    Membre émérite

    Profil pro
    Inscrit en
    Mars 2002
    Messages
    1 424
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 424
    Points : 2 927
    Points
    2 927
    Par défaut
    dans les InitParams (section XMLUtils) tu as XMLC_FileUploadCreateUserDir
    qui permet de créer un répertoire par XMLC_UserID

    http://xmlrad.com/DelosBin/Delos.dll/ServePage?URL=Manual/Appendix14/index.htm&WEB_ID=101001015

  4. #4
    Membre du Club
    Inscrit en
    Mars 2003
    Messages
    77
    Détails du profil
    Informations forums :
    Inscription : Mars 2003
    Messages : 77
    Points : 55
    Points
    55
    Par défaut
    le XMLC_FileUploadCreateUserDir ne m'intéresse pas car je ne veux pas stocker les fichier par user, mais plutot nommer mes fichiers par Id unique qui correspond à mon id d'enregistrement correspondant dans ma base de données.
    dans ma base j'ai l'enregistrement 102 avec la synthèse de l'enquête et dans mon fichier N°102, j'ai le détail de l'enquête.

    Par contre Jeweller, ta méthode m'intéresse, mais n'y a t il pas une méthode permettant au serveur d'enregistrer le fichier au nom que l'on veux

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    284
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 284
    Points : 349
    Points
    349
    Par défaut
    Je pense qu'il faut que tu fasses l'enregistrement du fichier toi-meme pour avoir parfaite maitrise sur ce que tu veux faire.

    Inspire toi du code de XMLC_UploadFile dans l'unité XMLUtilsWM.pas, copie-colle le code dans un nouveau service et modifie-le.

    La méthode qui t'interesse en l'occurence est XMLRequest.SaveFileNo(), comme le disait Jeweller.

  6. #6
    Membre actif Avatar de Jeweller
    Inscrit en
    Août 2003
    Messages
    357
    Détails du profil
    Informations forums :
    Inscription : Août 2003
    Messages : 357
    Points : 278
    Points
    278
    Par défaut
    Si tu utilises le service du framework XMLC_UploadFile (avec la cholie barre de progession et tout et tout, wouaa... ) tu positionnes donc dans le nextAction ton xmlservice de retour. Dans un evenement de celui-ci (beforeservice par exemple) tu peux alors faire un truc du genre:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
      if Context.GetValue('XMLC_UploadedFileName') <> '' then
      begin 
         val := Context.GetValue('XMLC_UploadedFileName');
         f := ExtractFileName(val); //un truc à ta sauce
         valht := ConCatDir( "un truc à ta sauce aussi ;)" ,false);
     
         if not SystemMoveFile(val,valht+f,false,false) then
         begin
           SystemDeleteFile(val,false);
           XMLRequest.RaiseError('ERR_BIDULE','blabla'+SysErrorMessage(GetLastError));
         end;
      end;
    Et ca devrait faire l'affaire.
    Si tu n'utilises pas XMLC_UploadFile, dans ce cas tourne toi vers XMLRequest.SaveFileNo.

    Michael

  7. #7
    Membre du Club
    Inscrit en
    Mars 2003
    Messages
    77
    Détails du profil
    Informations forums :
    Inscription : Mars 2003
    Messages : 77
    Points : 55
    Points
    55
    Par défaut
    Voici le code que j'ai mis dans mon xmlservice INSERT et dans l'évènement AfterXMLGRAM
    Dans file, c'est le nom du fichier sélectionné dans mon formulaire de saisie
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
       if XMLApplication.InitParams.Values['XMLC_AllowFileUpload'] <> '1' then
         XMLRequest.RaiseError('ERR_FILE_UPLOAD_NOT_ALLOWED', ClassName+'.XMLC_UploadFile');
     
       if context.Values['file'] = '' then
         begin
           if XMLC_TraceInfo then EventLog.TraceInfo(XMLRequest, ClassName, 'XMLC_UploadFile - Pas de fichier à télécharger');
           Exit;
         end;
     
       UploadDir := XMLApplication.InitParams.Values['XMLC_FileUploadDir'];
       if UploadDir = '' then
         UploadDir := 'Upload';
       UploadDir := ConcatDir(XMLApplication.InitParams.Values['XMLC_DefaultDataDir'], UploadDir, True);
     
       filename := context.Values['CA_ID']+ '_' + ExtractFileName( context.Values['file']);
       context.Values['CA_FILENAME']:= filename;
       FileName := ConcatDir(UploadDir, FileName, False);
       if FileExists(FileName) then
           XMLRequest.RaiseError('ERR_UPLOADED_FILE_ALREADY_EXISTS', ClassName+'.XMLC_UploadFile - FileName[''+FileName+'']');
           if XMLC_TraceInfo then EventLog.TraceInfo(XMLRequest, ClassName, 'XMLC_UploadFile - ' + context.Values['file'] + ' dest : ' + filename);
         WriteStringToFile(context.Values['file'], FileName, False);
    avec cela ça marche.
    Merci pour votre Aide.

  8. #8
    Membre du Club
    Inscrit en
    Mars 2003
    Messages
    77
    Détails du profil
    Informations forums :
    Inscription : Mars 2003
    Messages : 77
    Points : 55
    Points
    55
    Par défaut
    En fait j'ai posé 2 questions sur ce forum et mon code reprend aussi la reponse à la question INSERT et UPLOAD

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 8
    Dernier message: 17/01/2014, 00h06
  2. Changement de nom des fichiers de données
    Par Tolede78 dans le forum Débuter
    Réponses: 4
    Dernier message: 26/01/2010, 10h55
  3. [XL-2002] Changement de nom de fichier
    Par phal2ip dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 01/07/2009, 15h58
  4. [Upload] Mauvais nom de fichier apres upload
    Par chambiges dans le forum Langage
    Réponses: 2
    Dernier message: 29/07/2007, 21h28
  5. changement de nom de fichier avec smartupload
    Par bourvil dans le forum ASP
    Réponses: 2
    Dernier message: 24/05/2004, 14h50

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo