{"id":94,"date":"2010-09-27T15:29:26","date_gmt":"2010-09-27T13:29:26","guid":{"rendered":"http:\/\/schulenwegg.ch\/cms\/?page_id=94"},"modified":"2015-06-11T05:30:44","modified_gmt":"2015-06-11T03:30:44","slug":"automatisierung-mit-winupload","status":"publish","type":"page","link":"https:\/\/archivista.ch\/cms\/de\/aktuell-blog\/jahre-2008-2019\/blogs-2010\/automatisierung-mit-winupload\/","title":{"rendered":"WinUpload"},"content":{"rendered":"<h1>\n\tAutomatisierte Uploads mit WinUpload<br \/>\n<\/h1>\n<p>\n\t<strong>Pfaffhausen, 13. April 2010:<\/strong> Mit dem Release 2010\/IV gibt es auf der ArchivistaBox neu eine Versionierung. Wie diese aktiviert bzw. mit ihr gearbeitet wird, dies haben wir im <a href=\"?page_id=93\"><strong>ersten Teil zum Release 2010\/IV<\/strong><\/a> aufgezeigt. Das Auschecken eines Dokumentes bereitet dabei kaum Schwierigkeiten. Und auch das Hochladen einer ge&auml;nderten Datei ist an sich einfach. Folgende Optionen stehen zur Auswahl:\n<\/p>\n<ul>\n<li>\n\t\ta) Upload der ge&auml;nderten Datei per WebClient\n\t<\/li>\n<li>\n\t\tb) Upload &uuml;ber FTP-Order (\/office\/dbname)\n\t<\/li>\n<li>\n\t\tc) Upload &uuml;ber API-Schnittstelle\n\t<\/li>\n<\/ul>\n<p>\n\tGerade die letzte Variante ist sehr m&auml;chtig, sie erfordert aber ein kleines Skript (als Beispiel hier mit unserer Hausspache Perl):\n<\/p>\n<pre>\r\n<span style=\"font-size: x-small;\">#!\/usr\/bin\/perl\r\nmy $fout = shift; # get here the filename\r\nuse strict;\r\nuse LWP::UserAgent; # we work with UserAgent (our batch web browser)\r\nuse HTTP::Request::Common qw(POST); # the post method must be imported\r\nmy $server = &quot;http:\/\/192.168.0.220\/perl\/avclient\/index.pl&quot;;\r\nmy $www = LWP::UserAgent-&gt;new; # new www session\r\nmy $res = $www-&gt;request(POST &quot;$server&quot;,\r\n  Content_Type =&gt; &#39;form-data&#39;, # multipart\/form-data\r\n  Content =&gt; [ # structure for our file\r\n  MAX_FILE_SIZE =&gt; 134217728, # max. size (WebClient won&#39;t accept more)\r\n  upload =&gt; [ $fout, $fout ], # file to upload, file name to use\r\n  go =&gt; &#39;go_action&#39;, # we need to call the go_action command\r\n  action =&gt; &#39;upload&#39;, # inside of go_action we need to use upload\r\n  uploaddef =&gt; 0, # scan def\r\n  host =&gt; &#39;localhost&#39;, # connection information\r\n  db =&gt; &#39;archivista&#39;,\r\n  uid =&gt; &#39;Admin&#39;,\r\n  pwd =&gt; &#39;archivista&#39;,\r\n  frm_Laufnummer =&gt; 1,\r\n])<\/span><\/pre>\n<p>\n\tDamit wir uns richtig verstehen, diese 20 Zeilen Code laden ein Dokument &uuml;ber unser API in den WebClient hoch. Diese Zeilen k&ouml;nnen genauso gut mit einer jeden anderen Programmiersprache realisiert werden. Allerdings, werden Sie einwenden wollen, ein normale\/r Benutzer\/in mag sich mit solchen &quot;Kleinigkeiten&quot; nicht herumschlagen. Auch hier gilt, einer unserer Kunde wollte einen automatisierten Upload der Dateien direkt aus einem Windows-Verzeichnis heraus.\n<\/p>\n<p>\n\tAls Vorbemerkung sei angemerkt, dass g&auml;ngige Office-Pakete problemlos auf einen FTP-Ordner Dateien speichern k&ouml;nnen. Es gibt zudem auch Programme, die einen beliebigen FTP-Ordner als Laufwerk bzw. Pfad einbinden k&ouml;nnen. Eine weitere Option kann darin bestehen, ein Verzeichnis zu &uuml;berwachen, und sobald eine ge&auml;nderte Datei eintrifft, ein Upload-Programm zu starten. Eine <a href=\"http:\/\/www.technixupdate.com\/7-free-tools-to-monitor-folder-changes\/\" target=\"_top\"><strong>&Uuml;bersicht &uuml;ber solche Programme finden Sie hier.<\/strong><\/a>\n<\/p>\n<h2>\n\t<strong>DirectoryMonitor &uuml;berwacht Verzeichnisse<\/strong><br \/>\n<\/h2>\n<p>\n\tMein Favorit aus der Liste w&auml;re <a href=\"http:\/\/www.deventerprise.net\/Projects.aspx\" target=\"_top\"><strong>Directory Monitor (getestet in Version 1.0.25).<\/strong><\/a> Wichtig beim Einrichten war, die Aktion auf &#39;Modifications&#39; zu aktivieren.\n<\/p>\n<p>\n\t<img loading=\"lazy\" decoding=\"async\" align=\"bottom\" alt=\"\" border=\"0\" height=\"422\" hspace=\"0\" src=\"\/de\/media\/version\/vers10.png\" vspace=\"0\" width=\"600\" \/>\n<\/p>\n<p>\n\tUnter Execute k&ouml;nnen wir dann ein Upload-Skript hinterlegen, um den Upload auszuf&uuml;hren. Im konkreten Falle haben wir das nachfolgende Skript filecopy.bat verwendet:\n<\/p>\n<pre>\r\ncd c:avtemp@echo offecho user ftp&gt; ftpcmd1.datecho ftp&gt;&gt; ftpcmd1.datecho cd office&gt;&gt; ftpcmd1.datecho cd archivista&gt;&gt; ftpcmd1.datecho bin&gt;&gt; ftpcmd1.datecho put %1&gt;&gt; ftpcmd1.datecho quit&gt;&gt; ftpcmd1.datPING -n 3 127.0.0.1&gt;nulftp -n -s:ftpcmd1.dat 192.168.0.220PING -n 1 127.0.0.1&gt;nuldel ftpcmd1.datdel %1<\/pre>\n<p>\n\tDriveMonitor stellt dabei sicher, dass nach dem &Auml;ndern einer Datei in einem Ordner der Upload der Datei automatisch vorgenommen wird. Grunds&auml;tzlich funktioniert dieses Verfahren einwandfrei. Allerdings gibt es zwei Dinge zu beachten. Erstens erfordert DriveMonitor eine neuere Dot.Net-Umgebung. Die Applikation selber ist zwar beschaulich klein, die Dot.Net-Umgebung dagegen erschreckend gross (und ohne einen Neustart geht gar nichts). Zweitens ist DriveMonitor eine Freeware-Applikation. D.h. Sie d&uuml;rfen die Applikation kostenfrei verwenden, erhalten aber z.B. die Sourcen nicht und von daher kann ich keine Aussagen machen wie stabil bzw. gut DriveMonitor wirklich ist.\n<\/p>\n<h2>\n\tL&ouml;sung mit WinUpload und WinCopy<br \/>\n<\/h2>\n<p>\n\tDie obenstehende L&ouml;sung hat noch einen anderen Nachteil. Beim FTP-Upload wird eine Text-Datei erstellt, um den Upload &uuml;ber den internen FTP-Client (ftp.exe) von Windows durchzuf&uuml;hren. Dabei werden Benutzerdaten bzw. Passw&ouml;rter im Klartext gespeichert (sowohl in der Batch-Datei als in der Steuerungsdatei). Zudem muss filecopy.bat (unser Upload-Programm) jeweils von Hand angepasst werden.\n<\/p>\n<p>\n\tAus diesen Gr&uuml;nden haben wir uns entschlossen zwei neue Hilfsprogramme zu erstellen. Es handelt sich dabei um die Programme <strong>winupload.pl<\/strong> bzw. <strong>wincopy.pl.<\/strong> Diese zwei Programme stehen ab <strong>Release 2010\/IV im Ordner \/home\/cvs\/archivista\/jobs<\/strong> zur Verf&uuml;gung. Die beiden Perl-Programme laufen plattformunabh&auml;ngig (getestet unter Linux und Windows, auf Mac mangels Rechner nicht &uuml;berpr&uuml;ft). Unter Linux wird Perl wohl bereits zur Verf&uuml;gung stehen, unter Windows d&uuml;rfte das eher nicht der Fall sein. Aus diesem Grunde haben wir die Programme kompilliert, d.h. Sie k&ouml;nnen die beiden Hilfsprogramme auch als EXE-Datei beziehen. Sie finden die beiden Programme (gezippt) hier:\n<\/p>\n<p>\n\t<a href=\"\/de\/media\/version\/winupload.zip\"><strong>www.archivista.ch\/de\/media\/version\/winupload.zip<\/strong><\/a><br \/>\n\t<a href=\"\/de\/media\/version\/wincopy.zip\" target=\"_blank\"><strong>www.archivista.ch\/de\/media\/version\/wincopy.zip<\/strong><\/a>\n<\/p>\n<h3>\n\tWinUpload zum Hochladen von Dateien<br \/>\n<\/h3>\n<p>\n\tMit dem ersten Program (winupload) k&ouml;nnen Dateien bequem hochgeladen werden. Ein Aufruf ohne Parameter gibt einen kurzen Hilfetext aus:\n<\/p>\n<pre>\r\nC:avuploadwinupload.exe v1.0 (c) 2010 by Archivista GmbH, upload files to WebClientThis program has three modes, a) single, b) config and c) uploada) single mode: C:avuploadwinupload.exe host db user password def https file [meta]b) config mode: C:avuploadwinupload.exe host db user password [def=0..x https=0\/1]c) upload mode: C:avuploadwinupload.exe file [fieldname1=value1:fieldname2=value2..]<\/pre>\n<p>\n\tDaraus k&ouml;nnen wir entnehmen, dass wir winupload in drei Varianten aufrufen k&ouml;nnen. Im Single-Modus geben wir s&auml;mtliche Parameter mit an und der Upload der Datei erfolgt direkt (ohne Konfiguration). Im Config-Modus k&ouml;nnen wir die Uplaod-Parameter so hinterlegen, dass wir anschliessend nur noch den Dateinamen angeben k&ouml;nnen. Im Upload-Modus schliesslich geben wir nur die Datei und allf&auml;llige Meta-Informationen mit, um eine Datei hochzuladen. Die Verbindungsoptionen werden aus der Datei winupload.dat ausgelesen. Diese Datei liegt nicht im Klartext vor, doch sei hier auch gesagt, dass falls Sie eine qualitative hochstehende Verschl&uuml;sslung ben&ouml;tigen, die vorliegende Verion 1.0 von WinUpload diesen Anspr&uuml;chen nicht gen&uuml;gt. Nachfolgend die drei Modi mit je einem Beispiel:\n<\/p>\n<p>\n\tSingle-Modus: winupload 192.168.0.220 archivista Admin archivista 0 0 c:14282d.pdf<br \/>\n\tConfig-Modus: winupload 192.168.0.220 archivista Admin archivista 0 0<br \/>\n\tUpload-Modus: winupload c:14282d.pdf Titel=Hallo\n<\/p>\n<h3>\n\tWinCopy zum &Uuml;berpr&uuml;fen eines Verzeichnisses<br \/>\n<\/h3>\n<p>\n\tBevor wir eine Datei hochladen k&ouml;nnen, m&uuml;ssen wir ein Verzeichnis &uuml;berwachen. Daf&uuml;r ist das zweite Programm wincopy.exe gedacht. Sie k&ouml;nnen das Programm ohne Parameter starten und erhalten dann eine Auflistung der Optionen:\n<\/p>\n<pre>\r\nC:avuploadwincopy.exe v1.0 (c) 2010 by Archivista GmbH, watch a dir and call upload prgC:avuploadwincopy.exe dirin dirtemp seconds (to wait between checks for uploads) [upload]   => [upload] optional, without it call winupload.pl or winupload.exe   =&gt; you can stop the program if you cre\r\nate a file wincopy.stp<\/pre>\n<p>\n\t<strong>Achtung: Wir emfpehlen sehr, das Programm einzig innerhalb eines leeren Programmordners zu starten. Wird wincopy.exe mit einem g&uuml;ltigen Verzeichnis gestartet, so werden umgehend s&auml;mtliche Dateien ins Tempor&auml;rverzeichnis verschoben und anschliessend wird versucht, diese Dateien hochzuladen.<\/strong>\n<\/p>\n<p>\n\tDoch zur&uuml;ck zu den Parametern. An erster Stelle muss das zu &uuml;berwachende Verzeichnis stehen, an zweiter Stelle folgt ein Tempor&auml;rverzeichnis, um zu testen, ob eine Datei die hochgeladen werden soll, nicht mehr von einer Applikation &quot;gesperrt&quot; wird. In diesem Falle k&ouml;nnte der Upload unter Umst&auml;nden nicht korrekt erfolgen. An dritter Stelle kann eine Pausenzeit in Sekunden eingeben werden (3-60 Sekunden). In diesem Intervall wird das an erster Stelle angegebene Verzeichnis &uuml;berpr&uuml;ft.\n<\/p>\n<h2>\n\tKomplettes Beispiel zum Abschluss<br \/>\n<\/h2>\n<p>\n\ta) Erstellen Sie den Ordner <span style=\"font-family: Courier New;\">&#39;c:avupload&#39;<\/span><br \/>\n\tb) Kopieren Sie die Dateien <span style=\"font-family: Courier New;\">&#39;winupload.exe&#39;<\/span> und <span style=\"font-family: Courier New;\">&#39;wincopy.exe&#39;<\/span> in dieses Verzeichnis<br \/>\n\tc) Starten Sie wincopy.exe 192.168.0.100 archivista Admin archivista 0 0 (bzw. andere Anmeldeoptionen)<br \/>\n\td) &Uuml;berpr&uuml;fen Sie im Verzeichnis <span style=\"font-family: Courier New;\">&#39;c:avupload&#39;,<\/span> ob die Datei <span style=\"font-family: Courier New;\">&#39;winupload.dat&#39;<\/span> besteht.<br \/>\n\te) &Uuml;berp&uuml;rfen Sie, ob das Verzeichnis <span style=\"font-family: Courier New;\">&#39;c:temp&#39;<\/span> besteht (ansonsten erstellen!).<br \/>\n\tf) Starten Sie <span style=\"font-family: Courier New;\">&#39;wincopy.exe .&#39;<\/span> (mit dem Punkt am Schluss verwenden Sie das aktuelle Verzeichnis)<br \/>\n\tg) Speichern Sie eine Office-Datei ins Verzeichnis <span style=\"font-family: Courier New;\">&#39;c:avupload&#39;.<\/span> Sie wird umgehend hochgeladen.\n<\/p>\n<p>\n\t<strong>Hinweis: Punkt g) funktioniert nur, wenn die Datei nicht mehr vom Verarbeitungsprogramm gesperrt wird. Sie werden daher in der Regel die Datei nach dem &#39;Speichern&#39; auch noch &#39;Schliessen&#39; m&uuml;ssen.<\/strong>\n<\/p>\n<p>\n\tSelbstverst&auml;ndlich werden Sie das Hilfsprogramm &#39;wincopy.exe .&#39; beim Hochstarten bzw. &uuml;ber einen Dienst anwerfen wollen. Und nat&uuml;rlich d&uuml;rfen Sie die Perl-Programme winupload.pl und wincopy.pl beliebig an ihre eigenen Bed&uuml;rfnisse anpassen, d.h. sofern Sie den Quellcode auch wieder unter die GPL-Lizenz stellen.\n<\/p>\n<p>\n\t&nbsp;<\/p>\n\n\n\n\t<div class=\"dkpdf-button-container\" style=\"            text-align:right \">\n\n\t\t<a class=\"dkpdf-button\" href=\"\/cms\/wp-json\/wp\/v2\/pages\/94?pdf=94\" target=\"_blank\"><span class=\"dkpdf-button-icon\"><i class=\"fa fa-file-pdf-o\"><\/i><\/span> PDF Button<\/a>\n\n\t<\/div>\n\n\n\n\n\n","protected":false},"excerpt":{"rendered":"<p>Automatisierte Uploads mit WinUpload Pfaffhausen, 13. April 2010: Mit dem Release 2010\/IV gibt es auf der ArchivistaBox neu eine Versionierung. Wie diese aktiviert bzw. mit ihr gearbeitet wird, dies haben wir im ersten Teil zum Release 2010\/IV aufgezeigt. Das Auschecken eines Dokumentes bereitet dabei kaum Schwierigkeiten. Und auch das Hochladen einer ge&auml;nderten Datei ist an [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":224,"menu_order":335,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_acf_changed":false,"footnotes":""},"class_list":["post-94","page","type-page","status-publish","hentry"],"acf":[],"_links":{"self":[{"href":"https:\/\/archivista.ch\/cms\/wp-json\/wp\/v2\/pages\/94","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/archivista.ch\/cms\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/archivista.ch\/cms\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/archivista.ch\/cms\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/archivista.ch\/cms\/wp-json\/wp\/v2\/comments?post=94"}],"version-history":[{"count":1,"href":"https:\/\/archivista.ch\/cms\/wp-json\/wp\/v2\/pages\/94\/revisions"}],"predecessor-version":[{"id":1395,"href":"https:\/\/archivista.ch\/cms\/wp-json\/wp\/v2\/pages\/94\/revisions\/1395"}],"up":[{"embeddable":true,"href":"https:\/\/archivista.ch\/cms\/wp-json\/wp\/v2\/pages\/224"}],"wp:attachment":[{"href":"https:\/\/archivista.ch\/cms\/wp-json\/wp\/v2\/media?parent=94"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}