Aller au contenu

Messages recommandés

Posté(e)

Bonjour aux lispeurs,

 

J'aurais besoin de télécharger un fichier sur un serveur internet.

 

j'ai trouvé cette fonction sur un autre forum :

(defun L12_GetFileFromURL  (url path / utilObj tempPath newPath)
;; © RenderMan 2011, CADTutor.net
;; Example: (download "http(s)://username:password@server/source.ext" (getvar 'dwgprefix))
(vl-load-com)
(setq utilObj (vla-get-utility
                (vla-get-activedocument (vlax-get-acad-object))))
(if (= :vlax-true (vla-isurl utilObj url))
  (if (vl-catch-all-error-p
        (vl-catch-all-apply
          'vla-GetRemoteFile
          (list utilObj url 'tempPath :vlax-true)))
    (prompt "\n  <!>  Error Downloading File From URL  <!> ")
    (progn
      (if (findfile
            (setq newPath
                   (strcat path
                           (vl-filename-base url)
                           (vl-filename-extension url))))
        (vl-file-rename
          newPath
          (setq voidPath
                 (strcat
                   (vl-filename-directory newPath)
                   "\\void_"
                   (vl-filename-base newPath)
                   "_"
                   (menucmd
                     "M=$(edtime,$(getvar,date),YYYY-MO-DD-HH-MM-SS)")
                   (vl-filename-extension newPath)))))
      (vl-file-copy tempPath newPath)
      (vl-file-delete tempPath)))
  (prompt "\n  <!>  Invalid URL  <!> "))
(vl-catch-all-apply 'vlax-release-object (list utilObj))
(princ)
)

 

Elle fonctionne bien sauf dans un cas : le fichier que je dois récupérer n'a pas d'extension et la ca foire, le fichier généré est vide.

 

Une fonction crée par patrick_35 me ressort une erreur dans tous les cas :

(defun download	(url dir / byte fic file fso http ok tbl taille)
(setq http (vlax-create-object "MSXML2.XMLHTTP")
      fso  (vlax-create-object "Scripting.FileSystemObject")
      file (strcat dir
	    (vl-filename-base url)
	    "2"
	    (vl-filename-extension url)

    )
)
(vlax-invoke-method http 'open "get" url :vlax-false)
(if (vl-catch-all-error-p
     (vl-catch-all-apply 'vlax-invoke (list http 'send))
    )
 (princ (strcat "\nLe lien " url " n'est pas valide."))
 (if (eq (vlax-get http 'status) 200)
  (if (vl-catch-all-error-p
(setq taille (vl-catch-all-apply 'vlax-invoke
				 (list http 'getResponseHeader "Content-Length")
	     )
)
      )
   (princ "\nErreur de lecture sur la taille du fichier.")
   (if	(< (atoi taille)
   (vlax-get (vlax-invoke fso
			  'getdrive
			  (substr (vlax-invoke fso 'getabsolutepathname file) 1 1)
	     )
	     'freespace
   )
)
    (progn
     (princ "\nTéléchargement en cours...")
     (princ)
     (while (not (eq (vlax-get http 'readystate) 4))
      (vla-eval (vlax-get-acad-object) "DoEvents")
     )
     (setq tbl	(vlax-safearray->list
	 (vlax-variant-value (vlax-get-property http 'responsebody))
	)
     )
     (if (vl-catch-all-error-p
   (setq fic (vl-catch-all-apply 'vlax-invoke
				 (list fso 'createtextfile file)
	     )
   )
  )
      (princ (strcat "\nImpossible de créer le fichier " file))
      (progn
(foreach byte tbl
 (vlax-invoke fic 'write (vl-list->string (list byte)))
)
(vlax-invoke fic 'close)
(setq ok T)
      )
     )
    )
   )
  )
  (princ (strcat "\n"
	  (vlax-get http 'statustext)
	  "...Erreur "
	  (itoa (vlax-get http 'status))
	  "."
  )
  )
 )
)
(vlax-release-object http)
(vlax-release-object fso)
ok
)

 

C'est l'erreur "code caractère de la liste incorrect: 4233"

 

Une idée ?

 

Merci d'avance !

Posté(e)

J'en ai aussi profité pour revoir download

 

(defun download (url dir / byte fic file fso http ok tbl taille)
 (setq http (vlax-create-object "MSXML2.XMLHTTP")
       fso  (vlax-create-object "Scripting.FileSystemObject")
file (strcat dir (vl-filename-base url) (vl-filename-extension url)))
 (vlax-invoke-method http 'open "get" url :vlax-false)
 (vl-mkdir dir)
 (if (vl-catch-all-error-p (vl-catch-all-apply 'vlax-invoke (list http 'send)))
   (princ (strcat "\nLe lien " url " n'est pas valide."))
   (if (eq (vlax-get http 'status) 200)
     (if (vl-catch-all-error-p (setq taille (vl-catch-all-apply 'vlax-invoke (list http 'getResponseHeader "Content-Length"))))
(princ "\nErreur de lecture sur la taille du fichier.")
       (if (< (atoi taille) (vlax-get (vlax-invoke fso 'getdrive (substr (vlax-invoke fso 'getabsolutepathname file) 1 1)) 'freespace))
  (progn
    (princ "\nTéléchargement en cours...")(princ)
    (while (not (eq (vlax-get http 'readystate) 4))
      (vla-eval (vlax-get-acad-object) "DoEvents")
    )
    (setq tbl (vlax-safearray->list (vlax-variant-value (vlax-get-property http 'responsebody))))
    (if (vl-catch-all-error-p (setq fic (vl-catch-all-apply 'vlax-invoke (list fso 'createtextfile file))))
      (princ (strcat "\nImpossible de créer le fichier " file))
      (progn
	(foreach byte tbl
	  (vlax-invoke fic 'write (vl-list->string (list (+ 12288 byte))))
	)
	(vlax-invoke fic 'close)
	(setq ok T)
      )
    )
  )
)
     )
     (princ (strcat "\n" (vlax-get http 'statustext) "...Erreur " (itoa (vlax-get http 'status)) "."))
   )
 )
 (vlax-release-object http)
 (vlax-release-object fso)
 ok
)

 

Test

(download "http://carnet-de-cablage.chez-alice.fr/Blog/Syn-v1.21.zip" "c:/test/")

 

Par contre, pour mon test sur le fichier zip, j'ai du ajouter 12288 à chaque byte du fichier.

Il y a quelque chose qui m'échappe pour l'instant.

 

@+

Les Lisps de Patrick

Le but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.

Joseph Joubert, 1754-1824

Créer un compte ou se connecter pour commenter

Vous devez être membre afin de pouvoir déposer un commentaire

Créer un compte

Créez un compte sur notre communauté. C’est facile !

Créer un nouveau compte

Se connecter

Vous avez déjà un compte ? Connectez-vous ici.

Connectez-vous maintenant
×
×
  • Créer...

Information importante

Nous avons placé des cookies sur votre appareil pour aider à améliorer ce site. Vous pouvez choisir d’ajuster vos paramètres de cookie, sinon nous supposerons que vous êtes d’accord pour continuer. Politique de confidentialité