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

  • 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

    • Icon-Tutorials (IDE: Geany) - GPIO-Library - µController-Programmierung in Icon! - ser. Devices - kein Support per PM / Konversation

    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.

    Edited once, last by Andreas ().

  • 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:[hr]
    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.

  • 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

    • Icon-Tutorials (IDE: Geany) - GPIO-Library - µController-Programmierung in Icon! - ser. Devices - kein Support per PM / Konversation

    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.

    Edited once, last by Andreas ().

  • Hallo,


    Quote

    Ist es möglich, dass ich den completten Code privat senden kann ?


    Bei mir: nein. Suport per PN mache ich nicht.


    Außerdem brauchst du ja nicht den _komplette_ Code zu zeigen, sondern "nur" alle Zeilen, die für requests und das Senden relevant sind.


    Gruß, noisefloor


  • 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


  • 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



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