Bild (UIImage) in Mysql speichern (bzw. zum Webserver hochladen)

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Bild (UIImage) in Mysql speichern (bzw. zum Webserver hochladen)

    Hi,

    ich programmieren gerade eine kleine App und bastel gerade an der Profilverwaltung.
    Mann sich an der APP anmelden und auch regestrieren.
    Beides habe ich mithilfe von PHP und einer MYSQL-DB realisiert.
    Ich möchte jetzt noch eine Möglichkeit schaffen, dass sich ein User ein Profilbild hochladen kann.

    Dieses möchte ich gerne in der DB als BLOB speichern oder wenns nicht gehen sollte auf einen Webserver ablegen.

    Ich sitzte jetzt schon seit 4 Tagen dran, habe mehrere Stunden im Internet nach Lösungen gesucht und auch einiges ausprobioert.
    Jedoch alles ohne Erfolg.

    Ich hoffe ihr könnt mir helfen und mir erklären oder ein kleines beispiel geben, wie ich ein Bild aus meiner IOS APP entweder über PHP in die MYSQL- DB speicherere oder wenn nicht möglich wie ich es zu einem Webserver übertragen kann.

    Vielen Dank im vorraus.
  • Mac & i Test Abo
  • ne habe ich leider noch nicht gemacht.
    Ich hab jetzt erst grad durchs lesen gemerkt, das evtl mein Apache schuld ist.

    Ich hatte das erst nicht vermutte, da ich über andere PHP-Datein meine "TExtdaten" für username,password perfekt kommunizieren kann.
    Und ich würde am liebsten auch noch ne Varianten mit einer Speicherung in meiner Datenbank bervorzugen.
    Ich habe dafür eine kleine HTML-Seite gebaut, über die kann ich ein Bild auswählen und es hochladen und es wird in meine DB geschrieben.
    Ich bekomme das nur leider nicht in IOS umgesetzt.
    Das Hochladen meine ich, dass auslesen eines Bilder aus der DB funktioniert schon.
  • ideveloper2099 schrieb:

    ne habe ich leider noch nicht gemacht.
    Ich hab jetzt erst grad durchs lesen gemerkt, das evtl mein Apache schuld ist.

    Woraus schließt Du das? Du hast den Fehler anscheinend noch nicht eingehender untersucht, weißt jedoch schon, woran es liegt. Abgesehen davon gehört der Apache mit zu den stabilsten Servern, oder andersherum ausgedrückt gibt es drei Komponenten, bei denen Fehler wesentlich wahrscheinlicher sind: die iOS-App, die PHP-Seite oder die Apache-Konfiguration.
    „Meine Komplikation hatte eine Komplikation.“
  • Ich bin mir bei den Fehler halt nicht 100% sicher.
    Ich habe auch im Moment nur einen Apache über XAMPP am laufen.
    Ich habe gestern mal geguckt und alle im Internet emfolen Module sind bereits eingebunden.

    Ich habe hier mal meine kleine HTML Möglichkeit, welche ich gerne in IOS umsetzten möchte:

    index.php

    PHP-Quellcode

    1. <?php
    2. // MySQL-Verbindung herstellen
    3. require 'connect.php';
    4. // Formular abgeschickt
    5. if(isset($_FILES['image'])) {
    6. // Datei hochgeladen
    7. if(is_uploaded_file($_FILES['image']['tmp_name'])) {
    8. // Verweis auf Bild
    9. $image = $_FILES['image']['tmp_name'];
    10. // Vorbereiten für den Upload in DB
    11. $data = addslashes(file_get_contents($image));
    12. // Metadaten auslesen
    13. $meta = getimagesize($image);
    14. $mime = $meta['mime'];
    15. // Bild in DB speichern
    16. mysql_query("INSERT INTO images VALUES('', '$data', '$mime')");
    17. }
    18. }
    19. ?>
    20. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
    21. <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="de" lang="de">
    22. <head>
    23. <meta http-equiv="content-type" content="text/html; charset=UTF-8" />
    24. <title>MySQL-Bilder-Datenbank</title>
    25. </head>
    26. <body>
    27. <h1>Bild hochladen</h1>
    28. <form action="" method="post" enctype="multipart/form-data">
    29. <input name="image" type="file" />
    30. <input type="submit" value="hochladen" />
    31. </form>
    32. <h1>Bilderliste</h1>
    33. <?php
    34. $result = mysql_query("SELECT id FROM images");
    35. while($row = mysql_fetch_object($result)) {
    36. echo '<img alt="" src="image.php?id='.$row->id.'" /><br />';
    37. }
    38. ?>
    39. </body>
    40. </html>
    Alles anzeigen


    connect.php

    PHP-Quellcode

    1. <?php
    2. //DB Daten
    3. $hostname = '192.168.2.104';
    4. $database = 'imageDB';
    5. $username = 'user';
    6. $password = 'pwd';
    7. mysql_connect($hostname,$username,$password) or die("Could not connect");
    8. mysql_select_db($database) or die(mysql_error());
    9. ?>
    Alles anzeigen


    Diese Lösung funktioniert wunderbar.

    ich habe mir sogar schon eine getImage.php erstellt:

    PHP-Quellcode

    1. <?php
    2. require 'connect.php';
    3. //Test ID 1
    4. $id="1";
    5. $result = mysql_query("SELECT * FROM images");
    6. while($row = mysql_fetch_object($result)) {
    7. echo '<img alt="" src="image.php?id='$id'" /><br />';
    8. ?>


    Dies getImage.php kann ich auch ohne Proble in IOS aufrufen und den Rückgabewert wieder zu einem Image formen.

    Leider verzweifel ich immer noch an das Sende eines Bildes in dieser Lösung.

    Kann mir da jemand weiterhelfen?
  • wolf_10de schrieb:

    Alles was du brauchst ist doch ein Request, so in der Richtung

    stackoverflow.com/questions/12…to-server-from-ios-device

    Hi das ist einer von unzähligen Artikeln, die ich bereits getestet habe und leider immer ohne erfolg.
    Ich hatte da bei auch zu debug zwecken in der PHP ein

    PHP-Quellcode

    1. $echo $file
    ausgeben lassen.
    Und bekamm leider keinen Wert.
    Daher meine Vermutung das irgendwas falsch läuft mit dem übertragen (POST) des Bildes zum PHP.
  • macmoonshine schrieb:

    ideveloper2099 schrieb:

    Kann mir da jemand weiterhelfen?

    Was steht denn in den Logs? Was ist der Response-Code?

    Ich bekomme leider nix als respone zurück.
    ich hatte zeitweise mal ein echo "test:"; echo $file;

    und bekamm als respone nur test: zurück.

    Wenn wir mal bei diesem Bespiel bleiben:

    PHP-Quellcode

    1. $uploaddir = './uploads/';
    2. $file = basename($_FILES['userfile']['name']);
    3. $uploadfile = $uploaddir . $file;
    4. if (move_uploaded_file($_FILES['userfile']['tmp_name'], $uploadfile)) {
    5. echo "http://iphone.zcentric.com/uploads/{$file}";
    6. }
    7. else
    8. echo "error";


    Habe ich nur das "error" aus meiner Elseanweisung zurück bekommen.

    Das gleiche passiert auch mit der Variante um in die DB zuschreiben.
  • macmoonshine schrieb:

    ideveloper2099 schrieb:

    Ich bekomme leider nix als respone zurück.

    connection:didFailWithError: oder connection:didReceiveResponse: sollte die URL-Connection (im Fehlerfall) immer aufrufen.

    Was steht denn in den Apache-Logs?
    So das ist was ich Momentan getestet habe:

    uploadImgwebservice.php:

    PHP-Quellcode

    1. <?php
    2. $file = basename($_FILES['userfile']['name']);
    3. echo "test: "; echo $file;
    4. ?>


    IOS:

    Brainfuck-Quellcode

    1. - (IBAction)upload:(id)sender {
    2. UIImage *picture = [UIImage imageNamed:@"bild.jpg"];
    3. NSData *imageData = UIImageJPEGRepresentation(picture, 90);
    4. NSString *urlString = @"http://192.168.2.104/~userfolder/grouply/uploadImgwebservice.php";
    5. NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init];
    6. [request setURL:[NSURL URLWithString:urlString]];
    7. [request setHTTPMethod:@"POST"];
    8. NSString *boundary = @"---------------------------14737809831466499882746641449";
    9. NSString *contentType = [NSString stringWithFormat:@"multipart/form-data; boundary=%@",boundary];
    10. [request addValue:contentType forHTTPHeaderField: @"Content-Type"];
    11. NSMutableData *body = [NSMutableData data];
    12. [body appendData:[[NSString stringWithFormat:@"rn--%@rn",boundary] dataUsingEncoding:NSUTF8StringEncoding]];
    13. NSString *filename = @"test.jpg";
    14. [body appendData:[[NSString stringWithString:[NSString stringWithFormat:@"Content-Disposition: form-data; name=\"userfile\"; filename=\"%@\"\r\n",filename]] dataUsingEncoding:NSUTF8StringEncoding]];
    15. [body appendData:[@"Content-Type: application/octet-streamrnrn" dataUsingEncoding:NSUTF8StringEncoding]];
    16. [body appendData:[NSData dataWithData:imageData]];
    17. [body appendData:[[NSString stringWithFormat:@"rn--%@--rn",boundary] dataUsingEncoding:NSUTF8StringEncoding]];
    18. // setting the body of the post to the reqeust
    19. [request setHTTPBody:body];
    20. NSData *returnData = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];
    21. NSString *returnString = [[NSString alloc] initWithData:returnData encoding:NSUTF8StringEncoding];
    22. NSLog(@"%@",returnString);
    23. }
    Alles anzeigen


    respone:
    2013-06-06 17:06:14.583 pic_[51086:c07] test:

    error log apache:

    Quellcode

    1. [error] [client 192.168.2.104] script '/Users/userfolder/Sites/grouply/uploadingwebservice.php' not found or unable to stat


    access-log

    Quellcode

    1. 192.168.2.104 - - [06/Jun/2013:17:06:14 +0200] "POST /~userfolder/grouply/uploadImgwebservice.php HTTP/1.1" 200 6


    Das ganze ist ein Code aus dem Internet, den ich gefunden habe, aber die Examples sind ja fast alle identisch.
  • Im apache-log steht doch das er das Skript nicht findet.

    Quellcode

    1. http://192.168.2.104/~userfolder/grouply/uploadImgwebservice.php

    Das sieht auch komisch aus, sollte eher so sein:

    Quellcode

    1. http://192.168.2.104/meinOrdner/skript.php
  • wolf_10de schrieb:

    Im apache-log steht doch das er das Skript nicht findet.

    Quellcode

    1. http://192.168.2.104/~userfolder/grouply/uploadImgwebservice.php

    Das sieht auch komisch aus, sollte eher so sein:

    Quellcode

    1. http://192.168.2.104/meinOrdner/skript.php

    wolf_10de schrieb:

    Im apache-log steht doch das er das Skript nicht findet.

    Quellcode

    1. http://192.168.2.104/~userfolder/grouply/uploadImgwebservice.php

    Das sieht auch komisch aus, sollte eher so sein:

    Quellcode

    1. http://192.168.2.104/meinOrdner/skript.php

    Ja aber es steht folgede Meldung da:

    Quellcode

    1. not found or unable to stat


    Wenn er Sie nicht finden würde könnte, würde ich ja kein respone bekommen.
    Und der aufruf in der Weise klappt wunderbar.

    ~userfolder = /Users/userfolder/Sites und dort habe ich halt mehrere daher noch die angabe des Ordners und dann die der PHP-Datei.
  • ich habs...

    Hi ich konnte meine Problem Lösen.

    Hier meine Lösung

    IOS:

    Brainfuck-Quellcode

    1. - (IBAction)show:(id)sender {
    2. UIImage *picture = [UIImage imageNamed:@"bild.jpg"];
    3. [imgView setImage:picture];
    4. [self uploadImage:picture];
    5. }
    6. -(void) uploadImage: (UIImage *)image
    7. {
    8. NSData *imageData = UIImageJPEGRepresentation(image, 10);
    9. NSString *urlString = @"http://172.16.22.60/~userfolder/grouply/uploadNEW.php";
    10. NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init];
    11. [request setURL:[NSURL URLWithString:urlString]];
    12. [request setHTTPMethod:@"POST"];
    13. NSString *boundary = @"---------------------------14737809831466499882746641449";
    14. NSString *contentType = [NSString stringWithFormat:@"multipart/form-data; boundary=%@",boundary];
    15. [request addValue:contentType forHTTPHeaderField: @"Content-Type"];
    16. NSMutableData *body = [NSMutableData data];
    17. [body appendData:[[NSString stringWithFormat:@"\r\n--%@\r\n",boundary] dataUsingEncoding:NSUTF8StringEncoding]];
    18. [body appendData:[[NSString stringWithFormat:@"Content-Disposition: form-data; name=\"image\"; filename=\"imagename.jpg\"\r\n"] dataUsingEncoding:NSUTF8StringEncoding]];
    19. [body appendData:[@"Content-Type: application/octet-stream\r\n\r\n" dataUsingEncoding:NSUTF8StringEncoding]];
    20. [body appendData:[NSData dataWithData:imageData]];
    21. [body appendData:[[NSString stringWithFormat:@"\r\n--%@--\r\n",boundary] dataUsingEncoding:NSUTF8StringEncoding]];
    22. [request setHTTPBody:body];
    23. NSData *returnData = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];
    24. NSString *returnString = [[NSString alloc] initWithData:returnData encoding:NSUTF8StringEncoding];
    25. NSLog(@"%@",returnString);
    26. }
    Alles anzeigen


    und php:

    PHP-Quellcode

    1. <?php
    2. require 'connect.php';
    3. if (isset($_FILES['image']) && $_FILES['image']['size'] > 0) {
    4. $tmpName = $_FILES['image']['tmp_name'];
    5. // Read the file
    6. $fp = fopen($tmpName, 'r');
    7. $data = fread($fp, filesize($tmpName));
    8. $data = addslashes($data);
    9. fclose($fp);
    10. // Metadaten auslesen
    11. $meta = getimagesize($tmpName);
    12. $mime = $meta['mime'];
    13. mysql_query("INSERT INTO images VALUES('', '$data', '$mime')");
    14. echo "Thank you, your file has been uploaded.";
    15. }
    16. else {
    17. echo "No image selected/uploaded";
    18. }
    19. ?>
    Alles anzeigen


    Damit habe ich meine Speicherung in der DB erreicht.
    Vielen Dank an alle!