Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi Fileupload verschnellern bzw mehrere gleichzeitig! (https://www.delphipraxis.net/66513-fileupload-verschnellern-bzw-mehrere-gleichzeitig.html)

bennle 30. Mär 2006 16:46


Fileupload verschnellern bzw mehrere gleichzeitig!
 
Hallo,
Ich habe mir eine Software geschrieben, welche Dateien und Infos per Post an ein PHP Skript sendet.
Allerdings muss ich jetzt feststellen, dass es machmal wirklich zu lange dauert.
Da ich leider nicht den Zugriff auf den Server besitze kommt keine andere Lösung in Frage.
Bei den Dateien handelt es sich um Bilder! Der Upload geschieht über Indy

So nun meine Frage, gibt evtl eine Methode dies zu verschnellern??
Ich habe schon an eine Datenkomprimierung (ZIP) gedacht, welches mein Skript dann wieder entpackt. Aber eine andere Lösung wäre mir lieber.
Ebenfalls würde ich gerne wissen, ob es möglich ist mehrere Uploads gleichzeitig zu starten. Damit das ganze etwas schneller abläuft.

Über eine akzeptable Lösung würde ich mich freuen.

MfG
Bennle

Die Muhkuh 30. Mär 2006 16:49

Re: Fileupload verschnellern bzw mehrere gleichzeitig!
 
Hi bennle,

meine Frage vorweg: Welche Internetverbindung hast du?

Es wäre auch gut, wenn du uns den relevanten Code zeigst (der vom Upload), damit wir dir helfen können.

Was gefällt dir an der Lösung mit Zip nicht? So schlecht finde ich die nichtmal.

Zitat:

Ebenfalls würde ich gerne wissen, ob es möglich ist mehrere Uploads gleichzeitig zu starten
Hier würde ich so vorgehen:

Für jeden Upload erstellst du einen Thread (Schau mal auf www.michael-puff.de da hats ein prima Tutorial) und übergibst diesem Thread den Dateinamen, den du hochladen willst und, wohin die Datei soll.

In dem Thread wird dann ein IdFTP (wenn du FTP-Upload machst) erzeugt und lädt die Datei hoch.

Dj_Base 30. Mär 2006 16:52

Re: Fileupload verschnellern bzw mehrere gleichzeitig!
 
Hi!

Die Zip-Lösung finde ich gar nicht so schlecht...
Obwohl ich nicht genau weiss, ob man bei JPG-Dateien allgemein soviel spart bei einer Kompression.

Aber sonst den Upload verschnellern ist warscheinlich nicht drin, denn du kannst ja auch nicht deinen Upload-Speed erhöhen bzw. auf die php.ini auf dem Server zugreifen, die - so meine ich mich erinnern zu können - u.a. die Upload-Geschwindigkeit regulieren kann.

mfg,
Dj_Base

bennle 30. Mär 2006 16:56

Re: Fileupload verschnellern bzw mehrere gleichzeitig!
 
Hallo,
Danke für deine schnelle Antwort
Zitat:

Zitat von Spider

meine Frage vorweg: Welche Internetverbindung hast du?

Ich habe DSL 2000.

Zitat:

Es wäre auch gut, wenn du uns den relevanten Code zeigst (der vom Upload), damit wir dir helfen können.
Hier:
Delphi-Quellcode:
function SendPictureData(Ahttp: TIdHTTP; const AtoURL: String; const aParams: TStrings): String;
  //Ahttp: Die HTTP Komponente von Indy
  //AtoURL: An diese URL werden die Informationen gesendet
  //aParams: Array mit Bildern (Pfad)
  //Result: HTML-Ergebnis (Antwort des Scripts)
Var
  lStream: TMemoryStream; //HTML-Result des PHP-Scripts
  I: Integer;
  picture: TIdMultiPartFormDataStream;   //Unit IdMultipartFormData muss eingebunden werden
begin
  Result:='';
  if not Assigned(aHttp) then
    exit;
  lStream := TMemoryStream.create;
  picture := TIdMultiPartFormDataStream.Create;
  try
  AHTTP.Request.ContentType := 'multipart/form-data';
    //Dieser Stream wird letztendlich gesendet
    //Stream mit Werten füllen
    for I:=0 to aParams.Count-1 do
      picture.AddFile('bild'+IntToStr(I+1),aParams[I],'image/jpeg');

    try
      //Stream an das PHP-Script senden
      AHTTP.Post(AtoURL,
                 picture,
                 lStream);
    except
      on E: Exception do
        showmessage('Fehler bei der Übertragung: ' + E.Message);
    end;
    SetLength(Result,lStream.Size);
    lStream.Position:=0;
    lStream.ReadBuffer(Result[1],lStream.Size);
  finally
    picture.Free;
    lStream.Free;
  end;
end;
Zitat:

Was gefällt dir an der Lösung mit Zip nicht? So schlecht finde ich die nichtmal.
Ich glaube es ist kein Standart bei den Providern diese in PHP einzukompilieren! Daher scheint es mir unpraktisch

Zitat:

Für jeden Upload erstellst du einen Thread (Schau mal auf www.michael-puff.de da hats ein prima Tutorial) und übergibst diesem Thread den Dateinamen, den du hochladen willst und, wohin die Datei soll.
Werde mir das mal anschaun. Hört sich fürs erste mal gut und brauchbar an.

MfG
Bennle

Die Muhkuh 30. Mär 2006 16:59

Re: Fileupload verschnellern bzw mehrere gleichzeitig!
 
Zitat:

Zitat von bennle
Zitat:

Zitat von Spider
meine Frage vorweg: Welche Internetverbindung hast du?

Ich habe DSL 2000.

Dann kannst du mit maximal 24 kb/s uploaden. Bei einigen Bildern kann das schon eine Weile dauern. Verschnellern kannst du da nur, in dem du dir ein schnelleres DSL holst *g*. Nein Scherz beiseite. Mit Verschnellern sieht es leider schlecht aus (zumindest ist mir nicht bekannt, wie man dies tun könnte).

bennle 30. Mär 2006 16:59

Re: Fileupload verschnellern bzw mehrere gleichzeitig!
 
Zitat:

Zitat von Dj_Base
Hi!

Die Zip-Lösung finde ich gar nicht so schlecht...
Obwohl ich nicht genau weiss, ob man bei JPG-Dateien allgemein soviel spart bei einer Kompression.

Aber sonst den Upload verschnellern ist warscheinlich nicht drin, denn du kannst ja auch nicht deinen Upload-Speed erhöhen bzw. auf die php.ini auf dem Server zugreifen, die - so meine ich mich erinnern zu können - u.a. die Upload-Geschwindigkeit regulieren kann.

mfg,
Dj_Base

Hallo,
Naja ok, ich denke es ist schon getan, dass ich mehrere Upload gleichzeitig machen kann. Es kommt mir einfach nur recht langsam vor! Ich glaube fast, das ich über das Webformular schneller bin, als wenn ich es mit der Software hochlade!
Übrigens werden nur kleine Bilder versand von höchstens 0,5 MB

MfG
Bennle

Die Muhkuh 30. Mär 2006 17:00

Re: Fileupload verschnellern bzw mehrere gleichzeitig!
 
Wie groß ist so ein Bild und wielange dauert es, bis es auf dem Server ist?

bennle 30. Mär 2006 17:02

Re: Fileupload verschnellern bzw mehrere gleichzeitig!
 
Zitat:

Zitat von Spider
Wie groß ist so ein Bild und wielange dauert es, bis es auf dem Server ist?

Die Bilder sind durchschnittlich ca 50 kB groß! Wenn ich ca 30 hochlade benötige ich um die 7 min!

MfG
Bennle

Die Muhkuh 30. Mär 2006 17:06

Re: Fileupload verschnellern bzw mehrere gleichzeitig!
 
Also, rechnen wir mal:

30 Bilder * 50 kb = 1500kb = 1,47mb

DSL 2000 kann 24 kb / s:

1500 / 24 = 62,5 s

OK, das wäre 1 minute.

Vielleicht liegt es ja daran, dass du keinen FTP-Upload verwendest. Wenn Du die möglich für FTP-Upload hast, könntest du mal versuchen, ob Du mit diesem schneller bist.

bennle 30. Mär 2006 17:08

Re: Fileupload verschnellern bzw mehrere gleichzeitig!
 
Zitat:

Zitat von Spider
Also, rechnen wir mal:

30 Bilder * 50 kb = 1500kb = 1,47mb

DSL 2000 kann 24 kb / s:

1500 / 24 = 62,5 s

OK, das wäre 1 minute.

Vielleicht liegt es ja daran, dass du keinen FTP-Upload verwendest. Wenn Du die möglich für FTP-Upload hast, könntest du mal versuchen, ob Du mit diesem schneller bist.

Hallo,
FTP-Upload ist leider nicht möglich bzw zu unsicher, da diese Software an meine Kunden verteilt wird.

Die Muhkuh 30. Mär 2006 17:12

Re: Fileupload verschnellern bzw mehrere gleichzeitig!
 
Hi,

du könntest trotzdem mal FTP-Upload versuchen (nur für dich) und schauen, ob du damit wirklich schneller bist. Wenn ja, könntest du ja in eine Ini-Datei die verschlüsselten Daten (Zum Verschlüsseln empfehle ich das DEC) mitgeben.

Mich würde es auch mal intressieren, ob du mit FTP schneller voran kommst.

Ansonsten bliebe dir noch der Zipweg.

bennle 30. Mär 2006 17:22

Re: Fileupload verschnellern bzw mehrere gleichzeitig!
 
Zitat:

Zitat von Spider
Hi,

du könntest trotzdem mal FTP-Upload versuchen (nur für dich) und schauen, ob du damit wirklich schneller bist. Wenn ja, könntest du ja in eine Ini-Datei die verschlüsselten Daten (Zum Verschlüsseln empfehle ich das DEC) mitgeben.

Mich würde es auch mal intressieren, ob du mit FTP schneller voran kommst.

Ansonsten bliebe dir noch der Zipweg.

Hallo,
Alles klar, werde es mal testen und dann bescheid geben.

Jetzt muss ich mich nur auf die schnelle mit den Threads anfreunden. Oder könntest du mir schnell meine Funktion umschreiben oder erkläre wie ich sie umschreiben muss.

MfG
Bennle

Frickeldrecktuxer_TM 30. Mär 2006 17:29

Re: Fileupload verschnellern bzw mehrere gleichzeitig!
 
Zitat:

Zitat von Spider
Wenn ja, könntest du ja in eine Ini-Datei die verschlüsselten Daten (Zum Verschlüsseln empfehle ich das DEC) mitgeben.

never. do. this.
daran ist nichts "sicherer". das passwort muss entschlüsselt werden dann liegt es unverschlüsselt im speicher. anschließend muss es unverschlüsselt übertragen werden wobei es von jedem abgefangen werden kann. FTP ist per definition nicht sicher sobald die leitung nicht sicher ist und das ist sie im internet nie. also verschlüsselnde FTP-server benutzen (zusammen mit OpenSSH zum beispiel SFTP) oder einen account auf dem server anlegen der nur beschränkten zugriff hat. bei dem wäre es dann nicht so schlimm wenn das passwort bekannt wird.

bennle 30. Mär 2006 17:34

Re: Fileupload verschnellern bzw mehrere gleichzeitig!
 
Zitat:

Zitat von Frickeldrecktuxer_TM
Zitat:

Zitat von Spider
Wenn ja, könntest du ja in eine Ini-Datei die verschlüsselten Daten (Zum Verschlüsseln empfehle ich das DEC) mitgeben.

never. do. this.
daran ist nichts "sicherer". das passwort muss entschlüsselt werden dann liegt es unverschlüsselt im speicher. anschließend muss es unverschlüsselt übertragen werden wobei es von jedem abgefangen werden kann. FTP ist per definition nicht sicher sobald die leitung nicht sicher ist und das ist sie im internet nie. also verschlüsselnde FTP-server benutzen (zusammen mit OpenSSH zum beispiel SFTP) oder einen account auf dem server anlegen der nur beschränkten zugriff hat. bei dem wäre es dann nicht so schlimm wenn das passwort bekannt wird.


Stimmt daran habe ich garnicht gedacht!! Also kommt das nicht in Frage!

Bennle

Die Muhkuh 30. Mär 2006 17:35

Re: Fileupload verschnellern bzw mehrere gleichzeitig!
 
@Frickel

:wall: Mist, daran hab ich auch nicht gedacht.

bennle 30. Mär 2006 17:40

Re: Fileupload verschnellern bzw mehrere gleichzeitig!
 
Hab mir das mit den Threads grad mal angeschaut, aber irgendwie verstehe ich nicht wo und wie ich die Threads starte.

Ich denke es liegt auch einfach daran, dass ich das bis heute Abend fertig haben will und unter Zeitruck stehe :lol:

Die Muhkuh 30. Mär 2006 17:42

Re: Fileupload verschnellern bzw mehrere gleichzeitig!
 
Hi,

ich muss mich etwas präzisieren. Es würde reichen, wenn du aus dem Tutorial nur Kapitel 8 (Das VCL-Thread Objekt) liest.

Wenn Du noch etwas wartest, versuche ich schnell ein kleines Beispiel zu tippen.

Die Muhkuh 30. Mär 2006 17:56

Re: Fileupload verschnellern bzw mehrere gleichzeitig!
 
Hi,

auf die schnelle fiel mir das hier ein:

Delphi-Quellcode:
TUploadThread = class(TThread)
  private
    FLocalFileName: String;
    FAToURL: String;
  protected
    procedure Execute; override;
  public
    constructor Create(const LocalFileName: String; const AToURL: String);
  end;

implementation

{ TUploadThread }

constructor TUploadThread.Create(const LocalFileName: String; const AToURL: String);
begin
  FLocalFileName := LocalFileName;
  FAToURL := AToURL;
end;

procedure TUploadThread.Execute;
var
  IdHTTP: TIdHTTP;
  picture: TIdMultiPartFormDataStream;
begin
  IdHTTP := TIdHTTP.Create(nil);
  picture := TIdMultiPartFormDataStream.Create;

  try
    IdHTTP.Request.ContentType := 'multipart/form-data';

    picture.AddFile('bild0', FLocalFileName, 'image/jpeg');

    try
      IdHTTP.Post(FAToURL, picture);
    except
      on E: Exception do
        raise Exception.Create('Fehler: ' + E.Message);
    end;
  finally
    IdHTTP.Free;
    picture.Free;
  end;

  Terminate;
end;

// Aufrufbeispiel

var
  UploadThread: TUploadThread;
begin
  UploadThread := TUploadThread.Create('C:\Test.jpg', 'www.blubb.de/ladmichhoch.php');
  UploadThread.FreeOnTerminate := true;
end;
Ich hab jetzt nicht alles aus deinem Code übernommen, aber ich denke, dass du das Prinzip verstehst (selbst, wenn mein Code jetzt nicht funktioniert)

bennle 30. Mär 2006 19:49

Re: Fileupload verschnellern bzw mehrere gleichzeitig!
 
Hallo,
Hab mal deinen Code probiert! Allerdings bekomm ich Ihn nicht zum Laufen! Kommt immer ein Thread error (Handle ungültig)

Was muss ich da tun?

MfG
Bennle

Thorben86 30. Mär 2006 21:41

Re: Fileupload verschnellern bzw mehrere gleichzeitig!
 
Zitat:

Zitat von Spider
Also, rechnen wir mal:

30 Bilder * 50 kb = 1500kb = 1,47mb

DSL 2000 kann 24 kb / s:

1500 / 24 = 62,5 s

OK, das wäre 1 minute.

Hierbei ist aber zu beachten, dass du nicht durchgängig mit 24 KB uppst, sondern nur einen Teil der Zeit.
Am Anfang gehts erst langsam hoch und zum ende hin wird es meistens auch noch mal langsamer, so gesehen kommt da noch etwas Zeit hinzu und generell ist es nich immer der Fall, dass man mit seinem Maximalen Upload auch uppt.

Dj_Base 30. Mär 2006 22:21

Re: Fileupload verschnellern bzw mehrere gleichzeitig!
 
He bennle!

hast du mal ausproboiert, um wie viel KB die JPEG-Dateien kleiner werden wenn du sie mit WinZip komprimierst.

Je nach dem, wie viel Prozent von der Ursprungsgröße du einsparst könntest du dir Upload-Zeit sparen.
Der Haken ist allerdings das Komprimieren und Extrahieren: das dauert ja auch noch ein wenig...

Man müsste es halt mal ausprobieren! :-D

Für große Dateien (z.B. mehrere (größere) PDFs) würde sich das verfahren aber vermutlich rentieren.

Es grüßt,
Dj_Base


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:58 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz