2017-05-25 2 views
0

Ich habe eine Cross-Plattform-App mit Monaca/Onsen UI und AngularJS gebaut. Die App ermöglicht es Benutzern, Bilder (Fotos) zu machen, und dies funktioniert wie vorgesehen.Hochladen von Bildern von der App auf den Server mit PHP

Als nächstes möchte ich die Bilder auf meinen Server für die Speicherung und zukünftige Verwendung hochladen.

Ich habe die App Bilderfassung funktioniert wie vorgesehen und ich habe eine PHP-Lösung auf dem Server, dass erscheint funktioniert, aber ich kann nicht scheinen, um die Bilder zu sehen.

Mein App-Code für die Erfassung und Upload sieht wie folgt aus (im Moment habe ich nur Zugriff auf das Bild Bibliothek und wählen Sie die Bilder zum Testen - anstatt sie zu erfassen - aber beide Lösungen arbeiten):

$scope.takePicture = function getImage() { 
    navigator.camera.getPicture(uploadPhoto, function (message) { 
     alert('get picture failed'); 
    }, { 
     quality: 100, destinationType: navigator.camera.DestinationType.FILE_URI, sourceType: navigator.camera.PictureSourceType.PHOTOLIBRARY 
    }); 
} 

function uploadPhoto(imageURI) { 
    var options = new FileUploadOptions(); 
    options.fileKey = "file"; 
    options.fileName = imageURI.substr(imageURI.lastIndexOf('/') + 1); 
    options.mimeType = "image/jpeg"; 
    var params = new Object(); 
    params.value1 = "test"; 
    params.value2 = "param"; 
    options.params = params; 
    options.chunkedMode = false; 

    var ft = new FileTransfer(); 
    ft.upload(imageURI, "http://mysite/public/api/savephotos.php", function (result) { 
     alert("Success: " + JSON.stringify(result)); // Success: {"bytesSent":42468,"responseCode":200,"response":"","objectId":""} 
    }, function (error) { 
     alert("Fail: " + JSON.stringify(error)); 
    }, options); 
} 

Von der Erfolg Antwort Es scheint, dass Bilder gesendet werden, aber wenn ich den Ordner überprüfen, in dem die Bilder gespeichert werden sollen (C: \ xampp \ htdocs \ public \ api \ upload), ist der Ordner leer. Die serverseitigen Details sind die Sximo-Vorlage, die das in AWS gehostete Laravel-Framework verwendet.

Der PHP-Code, der die Server-Seite Spar Griffe sieht wie folgt:

<?php 
    // Connect to Database 
    $DB_HOST = 'localhost'; 
    $DB_USER = 'root'; 
    $DB_PASS = ''; 
    $DB_NAME = 'myDB'; 

    $mysqli = new mysqli($DB_HOST, $DB_USER, $DB_PASS, $DB_NAME); 

    if (mysqli_connect_errno()) { 
     printf("Connect failed: %s\n", mysqli_connect_error()); 
     exit(); 
    } 

    // Allow Headers 
    header('Access-Control-Allow-Origin: *'); 
    $new_image_name = urldecode($_FILES["file"]["name"]).".jpg"; 
    // Move files into upload folder 
    move_uploaded_file($_FILES["file"]["tmp_name"], 'C:\xampp\htdocs\public\api\upload'.$new_image_name); 

mysqli_close($mysqli); 

jedoch die C: \ xampp \ htdocs \ public \ api \ upload ist leer - ohne Bilder an ihn gesendet . Ich habe eine Datei mit dem Namen uploadimage, die an das Verzeichnis * C: \ xampp \ htdocs \ public \ api * gesendet wurde, das mit jedem Test aktualisiert wird - aber das ist eine leere (0kb) Datei.

Wohin gehe ich falsch damit?

Antwort

0

Dies ist asynktask, dass ich Bild senden von der Galerie-App-Server verwenden

public static class requestPostReportPhoto extends AsyncTask<String, Void, String> { 

    Bitmap image; 
    String JSON_STRING; 

    @Override 
    protected void onPreExecute(){ 
     String fileUrl = Environment.getExternalStorageDirectory()+"/"+Environment.DIRECTORY_DCIM+"/"+"albumName"+"/"+"photoName"; 
     image = BitmapFactory.decodeFile(fileUrl); 

    } 

    @Override 
    protected String doInBackground(String... params) { 
     String fileUrl = Environment.getExternalStorageDirectory()+"/"+Environment.DIRECTORY_DCIM+"/"+"albumName"+"/"+"photoName"; 

     DataOutputStream dos = null; 
     String lineEnd = "\r\n"; 
     String twoHyphens = "--"; 
     String boundary = "*****"; 
     HttpURLConnection connection = null; 
     int bytesRead, bytesAvailable, bufferSize; 
     byte[] buffer; 
     int maxBufferSize = 1 * 1024 * 1024; 
     String response = "Error"; 



     String urlString = "yourUrlServer"; 

     try { 
      File file = new File(fileUrl); 
      FileInputStream fileInputStream = new FileInputStream(file); 
      URL url = new URL(urlString); 
      connection = (HttpURLConnection) url.openConnection(); 
      connection.setDoInput(true); // Allow Inputs 
      connection.setDoOutput(true); // Allow Outputs 
      connection.setUseCaches(false); 
      connection.setRequestMethod("POST"); 
      connection.setRequestProperty("Connection", "Keep-Alive"); 
      connection.addRequestProperty("content-type", "multipart/form-data; boundary=" + boundary); 


      dos = new DataOutputStream(connection.getOutputStream()); 

      dos.writeBytes(twoHyphens + boundary + lineEnd); 
      dos.writeBytes("Content-Disposition: form-data; name=\"file\";filename=\"" + "PHOTONAME" + "\"" + lineEnd); 
      dos.writeBytes(lineEnd); 



      Log.d("MediaPlayer", "Headers are written"); 

      bytesAvailable = fileInputStream.available(); 
      bufferSize = Math.min(bytesAvailable, maxBufferSize); 
      buffer = new byte[bufferSize]; 


      bytesRead = fileInputStream.read(buffer, 0, bufferSize); 

      while (bytesRead > 0) { 
       dos.write(buffer, 0, bufferSize); 
       bytesAvailable = fileInputStream.available(); 
       bufferSize = Math.min(bytesAvailable, maxBufferSize); 
       bytesRead = fileInputStream.read(buffer, 0, bufferSize); 
      } 


      dos.writeBytes(lineEnd); 

      dos.writeBytes(twoHyphens + boundary + twoHyphens + lineEnd); 

      StringBuilder responseSB = new StringBuilder(); 
      int result = connection.getResponseCode(); 
      BufferedReader br; 
      // 401 - 422 - 403 - 404 - 500 
      if (result == 401 || result == 422 || result == 403 || result == 404 || result == 500) 
      { 
       br = new BufferedReader(new InputStreamReader(connection.getErrorStream())); 
      } 
      else { 
       br = new BufferedReader(new InputStreamReader(connection.getInputStream())); 
      } 
      while ((JSON_STRING = br.readLine()) != null) 
       responseSB.append(JSON_STRING+ "\n"); 

      Log.d("MediaPlayer","File is written"); 
      fileInputStream.close(); 
      dos.flush(); 
      dos.close(); 
      br.close(); 


      response = responseSB.toString().trim(); 

     } catch (IOException ioe) { 
      Log.d("MediaPlayer", "error: " + ioe.getMessage(), ioe); 
     } 

     return response; 

    } 


    @Override 
    protected void onPostExecute(String result) { 
     Log.d("SERVER RESPONSE ->",result) 
    } 





    @Override 
    protected void onProgressUpdate(Void... values) { 
     super.onProgressUpdate(values); 
    } 

} 
Verwandte Themen