Bilddatei mit Zeitstempel auf den Webserver hochladen

  • Hallo zusammen,

    ich möchte aufgenommene Bilder auf einen Webserver mit einem TimeStamp hochladen. Dazu nutze ich zum einen ein Python Skript und ein PHP Skript. Zum Upload verwende ich HTTP und die POST Methode.

    Nun zum Problem das mit dem Bild hochladen klappt super aber der TimeStamp den kriege ich nicht richtig hin weil wahrscheinlich ein Fehler in einen der Dateien enthalten ist.

    Was mache ich falsch? Wäre sehr dankbar wenn mir jemand weiterhelfen könnte. :)

    Gruße

    MrNerd2207

    Einmal editiert, zuletzt von MrNerd2207 (31. Mai 2017 um 19:24)

  • Bilddatei mit Zeitstempel auf den Webserver hochladen? Schau mal ob du hier fündig wirst!

  • Hallo MrNerd2207 !

    Warum speicherst Du die Bilder der Raspi-Cam nicht bereits mit dem Aufnahmezeitpunkt ?
    Ein sh-Scipt dazu ist in der raspistill Beschreibung https://www.raspberrypi.org/documentation/…m/raspistill.md enthalten.

    Und wenn es mal mit dem Hochladen ein paar Stunden klemmt, hast Du trotzdem den richtigen Aufnahmezeitpunkt (und nicht den Hochladezeitpunkt)

    Servus !

    RTFM = Read The Factory Manual, oder so

  • Hallo zusammen,

    wer ist jetzt Fake?

    Exakt das gleiche steht hier schon...

    Beste Grüße

    Andreas

    Ich bin wirklich nicht darauf aus, Microsoft zu zerstören. Das wird nur ein völlig unbeabsichtigter Nebeneffekt sein.
    Linus Torvalds - "Vater" von Linux

    Linux is like a wigwam, no windows, no gates, but with an apache inside dancing samba, very hungry eating a yacc, a gnu and a bison.

    Einmal editiert, zuletzt von Andreas (17. Oktober 2017 um 23:28)

  • Sry für den Doppelten Beitrag wir sind Kollegen. Das Foto wird schon mit einer formatierten Timestamp als Dateiname erzeugt, der WebServer erwartet ein Foto mit parameternamen "file" und einen timestamp mit Paratemeternamen "timestamp"

    Der Webserver erwartet einen unformatierten also UNIX Timestamp
    Automatisch zusammengefügt:
    Wir müssen nur den UNIX Timestamp auf den Webserver senden. Dafür haben wir ja den Quellcode Ausschnitt hingeschrieben. Wüssten aber nicht wo der Fehler ist, vielleicht muss man es als Integer senden.

    Einmal editiert, zuletzt von Peter123. (29. Mai 2017 um 15:28)

  • Am Webserver kommt nichts an, also wir haben zum Testen noch ein PHP Skript geschrieben wo man die bilder manuell hochladen kann und manuell einen unix Timestamp eingeben muss. Das Alles funktioniert. Der Webserver ist also in Ordnung aber wenn ich Fotos vom Raspberry Pi ausschicke kommt da nichts an. Das Problem ist an Raspberry Seite, der schickt keinen UNIX Timestamp . Aus diesem Grund wird auch kein Bild angezeigt.

    import requests
    import time


    url = 'http://url.com'

    timestamp = int(time.time())
    query = {'timestamp': timestamp}
    r = requests.post(url, data=query)

    Hier ist ein Fehler drinne glaube ich :D

  • Hallo Peter,

    ich verstehe hier nur Bahnhof.

    Ob Du einen TimeStamp mitschickst oder nicht, hat keiner lei Einfluss auf die Datenübertragung an sich. Der Unix-Timestamp ist lediglich eine 64-Bit-Zahl und repräsentiert Datum und Uhrzeit, wenn entsprechend decodiert.

    Soll dieser Timestamp verwendet werden, um die gesendete Datei mit diesem Timestamp zu versehen? Wenn ja, würde ich das ganz einfach mit

    Code
    touch -d timestamp /Pfad/zur/Datei


    machen. Das kannst Du z.B. innerhalb des Pyhthonskripts als externes Kommando aufrufen.


    Ansonsten hängt die Wahrscheinlichkeit, Euch überhaupt helfen zu können, in erster Linie davon ab, ob es Euch gelingt, Euer Problem deutlich zu machen.


    Beste Grüße

    Andreas

    Ich bin wirklich nicht darauf aus, Microsoft zu zerstören. Das wird nur ein völlig unbeabsichtigter Nebeneffekt sein.
    Linus Torvalds - "Vater" von Linux

    Linux is like a wigwam, no windows, no gates, but with an apache inside dancing samba, very hungry eating a yacc, a gnu and a bison.

    Einmal editiert, zuletzt von Andreas (29. Mai 2017 um 15:43)


  • import requests
    import time


    url = 'http://url.com'

    timestamp = int(time.time())
    query = {'timestamp': timestamp}
    r = requests.post(url, data=query)

    Hier ist ein Fehler drinne glaube ich :D

    glaub ich nicht:

    Code
    import requests
    import time
    
    
    timestamp = int(time.time())
    payload = {'timestamp': timestamp}
    
    
    r = requests.post("http://httpbin.org/post", data=payload)
    print r.text
  • Ich versuche das Problem mehr mit Codes zu erklären.

    Ein Ausschnitt aus dem PHP CODE

    $pictureName = $_FILES['file']['name'];
    $timestamp = $_POST['timestamp'];

    Ausschnitt aus dem Python Code:


    def main():
    trig_pin = 18 ##GPIO Trigger
    echo_pin = 24 ##GPIO ECHO
    url = 'XXXX.php'
    while True:
    value = sensor.distanz()
    print("Gemessene Entfernung =%.1f cm" % value)
    time.sleep(2)
    if value <= XX:
    timestr = time.strftime("%Y%m%d-%H%M%S")
    timestamp = int(time.time())
    camera = picamera.PiCamera()
    camera.start_preview()
    time.sleep(5)
    camera.capture('bild_{}.jpg'.format(timestr))
    files = {'file': open('bild_{}.jpg'.format(timestr))}
    query = {'timestamp': timestamp}
    r = requests.post(url, data=query)
    r=requests.post(url, files=files)
    camera.stop_preview()
    camera.close()

  • Verwende Code-Tags.
    Am Python-Requests Modul kann es nicht liegen. Bei mir geht es problemlos.
    Was gibt ein ``print r.text`` aus? Und verwende nicht 2x dieselbe Variable.


    [code=php]<?php
    echo ' ' . htmlspecialchars($_POST["timestamp"]);
    ?>[/php]

    Also muss dein php Code fehlerhaft sein....

  • Hallo,

    das funktioniert nicht, weil du keinen Zeitstempel mitschickst.

    Code
    r = requests.post(url, data=query)
    r=requests.post(url, files=files)

    Die zweite Zeile erzeugt eine neue Instanz von requests, die an `r` gebunden ist. Die erste Zeile mit `data=query` ist damit weg / überschrieben.

    Du musst das alles in einen Zeile packen - das steht aber auch genau so in dem Link zu SO, den ich weiter oben gepostet habe.

    Gruß, noisefloor


  • Hallo,

    das funktioniert nicht, weil du keinen Zeitstempel mitschickst.

    Code
    r = requests.post(url, data=query)
    r=requests.post(url, files=files)

    Die zweite Zeile erzeugt eine neue Instanz von requests, die an `r` gebunden ist. Die erste Zeile mit `data=query` ist damit weg / überschrieben.

    Du musst das alles in einen Zeile packen - das steht aber auch genau so in dem Link zu SO, den ich weiter oben gepostet habe.

    Gruß, noisefloor

    also müsste es etwa so aussehen

    Code
    r=request.post('file': open('bild_{}.jpg'.format(timestr)), 'timestamp': int(time.time())}
  • Hallo,

    nee - das funktioniert eben _nicht_. Du musst den Trhead bei StackOverflow schon zu Ende lesen. Vorne steht in der Regel nur das, was nicht funktioniert...

    Das sollte funktionieren:

    [code=php]>>> url = 'http://httpbin.org/post'
    >>> files = {'file': open('somefile.pdf', 'rb')}
    >>> values = {'author': 'John Smith'}
    >>> r = requests.post(url, files=files, data=values)[/php]

    Gruß, noisefloor


  • Hallo,

    nee - das funktioniert eben _nicht_. Du musst den Trhead bei StackOverflow schon zu Ende lesen. Vorne steht in der Regel nur das, was nicht funktioniert...

    Das sollte funktionieren:

    [code=php]>>> url = 'http://httpbin.org/post'
    >>> files = {'file': open('somefile.pdf', 'rb')}
    >>> values = {'author': 'John Smith'}
    >>> r = requests.post(url, files=files, data=values)[/php]

    Gruß, noisefloor


    Deine Antwort hat mir sehr geholfen, vielen Dank konnte das Problem lösen.

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!