[Gelöst](CC) Download von Website

22. Juni 2015 08:30

Moin liebe NAV Kollegen,

erstmal erläutere ich am besten was ich erreichen möchte.

Wir haben die Anforderung bekommen, dass Artikel Bilder in einem Report mit eingebunden werden sollen.
Da denkt man ist ja Super einfach.
Leider sind bei uns die Bilder nirgends auf einem Netzlaufwerk aktuell gepflegt, dies wird alles auf einer Website aktuell gehalten und leider im Format JPG.

Ich habe dann etwas im Internet recherchiert und auf der Seite http://www.dynamics.is/?p=583 etwas gefunden.

Der Code sah sehr viel versprechend aus.
Zum weiteren Verstandniss, ich lasse das JPG Bild runterladen und dann über einen SHELL Befehl konvertieren in ein BMP.

Habe ihn für meinen Zweck etwas angepasst, aber leider erhalte ich eine Fehlermeldung(s. Anhäng).

In meinen Augen liegt der Fehler außerhalb von NAV, nur leider habe ich keinen Anhaltspunkt in welche Richtung.

Hoffe habe meine Frage so gut wie möglich beschrieben.

Hiernochmal der Code
Code:
IF URL = '' THEN EXIT;

IF NOT CONFIRM(Text016,TRUE,URL) THEN EXIT;

IF GUIALLOWED THEN BEGIN
  Window.OPEN('#1#############################################\\' + Text017 + '\' + Text018);
  Window.UPDATE(1,STRSUBSTNO(Text012,URL));
END;

IF ISSERVICETIER THEN BEGIN
  HTTPRequest := HTTPRequest.XMLHTTPRequestClass;
  HTTPRequest.open('GET',URL,FALSE,'','');
  HTTPRequest.send('');
  IF HTTPRequest.status <> 200 THEN
    ERROR(Text013,HTTPRequest.status,HTTPRequest.statusText);

END ELSE BEGIN
  CREATE(WinHTTP,TRUE,TRUE);

  WinHTTP.open('GET',URL,FALSE);
  WinHTTP.send('');

  IF WinHTTP.status <> 200 THEN
    ERROR(Text013,WinHTTP.status,WinHTTP.statusText);
END;

IF ISCLEAR(SystemShellFilesSystem) THEN
  CREATE(SystemShellFilesSystem,TRUE,TRUE);
IF ISCLEAR(SystemShellControl) THEN
  CREATE(SystemShellControl,TRUE,TRUE);

TempFolderName := GetTempPath;
TempFileName := TempFolderName + '\NAV_NR.JPG';
TempFolderName := TempFolderName + '\NAV_NR';
IF SystemShellFilesSystem.FolderExists(TempFolderName) THEN BEGIN
  SystemShellFilesSystem.DeleteFolder(TempFolderName,TRUE);
  SLEEP(100);
END;

SystemShellFilesSystem.CreateFolder(TempFolderName);
IF SystemShellFilesSystem.FileExists(TempFileName) THEN
  SystemShellFilesSystem.DeleteFile(TempFileName);

IF ISSERVICETIER THEN BEGIN
  ClientFile.WriteAllBytes(TempFileName,HTTPRequest.responseBody);
END ELSE BEGIN
  TempFile.CREATE(TempFileName);
  TempFile.CREATEOUTSTREAM(OutStr);
  InStr := WinHTTP.responseStream;
  COPYSTREAM(OutStr,InStr);
  TempFile.CLOSE;
END;

//Fehler entsteht ab dieser Befehlszeile
SystemShellItems := SystemShellControl.NameSpace(TempFileName).Items;
SystemShellControl.NameSpace(TempFolderName).CopyHere(SystemShellItems);
FOR Index := 1 TO SystemShellItems.Count DO BEGIN
  SystemShellItem := SystemShellItems.Item(Index - 1);
  FileName := RemovePath(SystemShellItem.Path);
  IF ISSERVICETIER THEN BEGIN
    TempText.ADDTEXT(ClientFile.ReadAllText(TempFolderName + '\' + FileName));
    TempBlob.Blob.CREATEOUTSTREAM(OutStr);
    TempText.WRITE(OutStr);
    TempBlob.Blob.CREATEINSTREAM(InStr);
  END ELSE BEGIN
    TempFile.OPEN(TempFolderName + '\' + FileName);
    TempFile.CREATEINSTREAM(InStr);
  END;
  IF GUIALLOWED THEN
    Window.UPDATE(1,STRSUBSTNO(Text019,FileName));
//  ReadTextStream(InStr,ConvertCP);
  IF NOT ISSERVICETIER THEN
    TempFile.CLOSE;
  SystemShellFilesSystem.DeleteFile(TempFolderName + '\' + FileName);
END;

IF SystemShellFilesSystem.FileExists(TempFileName) THEN
  SystemShellFilesSystem.DeleteFile(TempFileName);
IF SystemShellFilesSystem.FolderExists(TempFolderName) THEN
  SystemShellFilesSystem.DeleteFolder(TempFolderName,TRUE);

CLEAR(WinHTTP);
CLEAR(SystemShellFilesSystem);
CLEAR(SystemShellControl);
IF GUIALLOWED THEN
  Window.CLOSE;


UPDATE

Wir haben uns nochmal mit unserem System Admin zusammen gesetzt und in dem Gesrpach erfahren, dass die ganzen Bilder von der Website täglich auf ein Netzlaufwerk gesichert :evil: werden. Somit bleibt nur noch das umwandeln und importieren der Bilder über.
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.