Registriert seit: 8. Nov 2003
Ort: Hamburg
470 Beiträge
Delphi 2009 Professional
|
AW: Delphi Indy Datei via URL downloaden und temporär öffnen?
26. Jun 2019, 10:51
Hallo zusammen,
ich lade die Datei momentan so herunter in einen MemoryStream:
Delphi-Quellcode:
Stream := TMemoryStream.Create;
IdHTTP.HandleRedirects := True;
IdHTTP.Get('http://192.168.178.244/restapi/index.php/document/4/content', Stream);
Memo1.Text := IdHTTP.Response.RawHeaders.Text;
ResponseFileNameTemp := StringReplace(IdHTTP.Response.RawHeaders.Values['Content-Disposition'], 'attachment; filename="', '', [rfReplaceAll]);
ResponseFileName := StringReplace(ResponseFileNameTemp, '"', '', [rfReplaceAll]);
Stream.SaveToStream(CreateUnbuffedFilestream(GetSpecialFolder(CSIDL_APPDATA) + '\' + ResponseFileName));
Die Funktion "CreateUnbufferedFilestream" sieht so aus:
Delphi-Quellcode:
function CreateUnbuffedFilestream(const filename:string):TStream;
var FileHandle, hnd : THandle;
begin
FileHandle := CreateFile(PChar(filename), GENERIC_WRITE, 0, nil, CREATE_ALWAYS, FILE_ATTRIBUTE_TEMPORARY or FILE_FLAG_DELETE_ON_CLOSE, 0);
if hnd <> INVALID_HANDLE_VALUE then begin
result := THandleStream.Create(FileHandle);
ShellExecute(Application.Handle, 'open', PChar(filename), nil, nil, sw_show);
end else
result := nil;
end;
Das funktioniert soweit jedoch kann die Dtaei mittels ShellExecute nicht geöffnet werden. Bekomme da immer die Meldung dass die Datei in Benutzung ist.
Geändert von CG2003 (26. Jun 2019 um 11:31 Uhr)
|
|
Zitat
|