2016-08-15 4 views
1

Ich versuche, Bild (nach der Erfassung) an den Server über Mobiltelefon (Android) senden Dazu verwende ich PHP-Skript (es auf Server hochgeladen) Und JAVA-Code, um Bild zu posten.Senden Sie img an Server

Die URL des PHP-Skript: http://nwstudio.esy.es/AndroidFileUpload/uploads/fileUpload.php

Auf Mobil nach Klick-Taste für den Upload i ohne Text der Fehler oder alles nur kleine leere Fenster zu sehen (es sollte über Upload werden msg)

Was ich tun falsch? ;/

PHP:

<?php 

// Path to move uploaded files 
$target_path = "uploads/"; 

// array for final json respone 
$response = array(); 

// getting server ip address 
$server_ip = gethostbyname(gethostname()); 

// final file url that is being uploaded 
$file_upload_url = 'http://' . $server_ip . '/' . 'AndroidFileUpload' . '/' . $target_path; 


if (isset($_FILES['image']['name'])) { 
    $target_path = $target_path . basename($_FILES['image']['name']); 

    // reading other post parameters 
    $email = isset($_POST['email']) ? $_POST['email'] : ''; 
    $website = isset($_POST['website']) ? $_POST['website'] : ''; 

    $response['file_name'] = basename($_FILES['image']['name']); 
    $response['email'] = $email; 
    $response['website'] = $website; 

    try { 
     // Throws exception incase file is not being moved 
     if (!move_uploaded_file($_FILES['image']['tmp_name'], $target_path)) { 
      // make error flag true 
      $response['error'] = true; 
      $response['message'] = 'Could not move the file!'; 
     } 

     // File successfully uploaded 
     $response['message'] = 'File uploaded successfully!'; 
     $response['error'] = false; 
     $response['file_path'] = $file_upload_url . basename($_FILES['image']['name']); 
    } catch (Exception $e) { 
     // Exception occurred. Make error flag true 
     $response['error'] = true; 
     $response['message'] = $e->getMessage(); 
    } 
} else { 
    // File parameter is missing 
    $response['error'] = true; 
    $response['message'] = 'Not received any file!F'; 
} 

// Echo final json response to client 
echo json_encode($response); 
?> 

JAVA:

package com.nkdroid.tinderswipe; 

/** 
* Created by Haze on 15.08.2016. 
*/ 

import com.nkdroid.tinderswipe.AndroidMultiPartEntity.ProgressListener; 

import java.io.File; 
import java.io.IOException; 

import org.apache.http.HttpEntity; 
import org.apache.http.HttpResponse; 
import org.apache.http.client.ClientProtocolException; 
import org.apache.http.client.HttpClient; 
import org.apache.http.client.methods.HttpPost; 
import org.apache.http.entity.mime.content.FileBody; 
import org.apache.http.entity.mime.content.StringBody; 
import org.apache.http.impl.client.DefaultHttpClient; 
import org.apache.http.util.EntityUtils; 

import android.app.Activity; 
import android.app.AlertDialog; 
import android.content.DialogInterface; 
import android.content.Intent; 
import android.graphics.Bitmap; 
import android.graphics.BitmapFactory; 
import android.graphics.Color; 
import android.graphics.drawable.ColorDrawable; 
import android.os.AsyncTask; 
import android.os.Bundle; 
import android.util.Log; 
import android.view.View; 
import android.widget.Button; 
import android.widget.ImageView; 
import android.widget.ProgressBar; 
import android.widget.TextView; 
import android.widget.Toast; 
import android.widget.VideoView; 

public class UploadActivity extends Activity { 

    // LogCat tag 
    private static final String TAG = TakePhotoActivity.class.getSimpleName(); 

    private ProgressBar progressBar; 
    private String filePath = null; 
    private TextView txtPercentage; 
    private ImageView imgPreview; 
    private VideoView vidPreview; 
    private Button btnUpload; 
    long totalSize = 0; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_upload); 
     txtPercentage = (TextView) findViewById(R.id.txtPercentage); 
     btnUpload = (Button) findViewById(R.id.btnUpload); 
     progressBar = (ProgressBar) findViewById(R.id.progressBar); 
     imgPreview = (ImageView) findViewById(R.id.imgPreview); 
     vidPreview = (VideoView) findViewById(R.id.videoPreview); 

     // Receiving the data from previous activity 
     Intent i = getIntent(); 

     // image or video path that is captured in previous activity 
     filePath = i.getStringExtra("filePath"); 

     // boolean flag to identify the media type, image or video 
     boolean isImage = i.getBooleanExtra("isImage", true); 

     if (filePath != null) { 
      // Displaying the image or video on the screen 
      previewMedia(isImage); 
     } else { 
      Toast.makeText(getApplicationContext(), 
        "Sorry, file path is missing!", Toast.LENGTH_LONG).show(); 
     } 

     btnUpload.setOnClickListener(new View.OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       // uploading the file to server 
       new UploadFileToServer().execute(); 
      } 
     }); 

    } 

    /** 
    * Displaying captured image/video on the screen 
    * */ 
    private void previewMedia(boolean isImage) { 
     // Checking whether captured media is image or video 
     if (isImage) { 
      imgPreview.setVisibility(View.VISIBLE); 
      vidPreview.setVisibility(View.GONE); 
      // bimatp factory 
      BitmapFactory.Options options = new BitmapFactory.Options(); 

      // down sizing image as it throws OutOfMemory Exception for larger 
      // images 
      options.inSampleSize = 8; 

      final Bitmap bitmap = BitmapFactory.decodeFile(filePath, options); 

      imgPreview.setImageBitmap(bitmap); 
     } else { 
      imgPreview.setVisibility(View.GONE); 
      vidPreview.setVisibility(View.VISIBLE); 
      vidPreview.setVideoPath(filePath); 
      // start playing 
      vidPreview.start(); 
     } 
    } 

    /** 
    * Uploading the file to server 
    * */ 
    private class UploadFileToServer extends AsyncTask<Void, Integer, String> { 
     @Override 
     protected void onPreExecute() { 
      // setting progress bar to zero 
      progressBar.setProgress(0); 
      super.onPreExecute(); 
     } 

     @Override 
     protected void onProgressUpdate(Integer... progress) { 
      // Making progress bar visible 
      progressBar.setVisibility(View.VISIBLE); 

      // updating progress bar value 
      progressBar.setProgress(progress[0]); 

      // updating percentage value 
      txtPercentage.setText(String.valueOf(progress[0]) + "%"); 
     } 

     @Override 
     protected String doInBackground(Void... params) { 
      return uploadFile(); 
     } 

     @SuppressWarnings("deprecation") 
     private String uploadFile() { 
      String responseString = null; 

      HttpClient httpclient = new DefaultHttpClient(); 
      HttpPost httppost = new HttpPost(Config.FILE_UPLOAD_URL); 

      try { 
       AndroidMultiPartEntity entity = new AndroidMultiPartEntity(
         new ProgressListener() { 

          @Override 
          public void transferred(long num) { 
           publishProgress((int) ((num/(float) totalSize) * 100)); 
          } 
         }); 

       File sourceFile = new File(filePath); 

       // Adding file data to http body 
       entity.addPart("image", new FileBody(sourceFile)); 

       // Extra parameters if you want to pass to server 
       entity.addPart("website", 
         new StringBody("www.androidhive.info")); 
       entity.addPart("email", new StringBody("[email protected]")); 

       totalSize = entity.getContentLength(); 
       httppost.setEntity(entity); 

       // Making server call 
       HttpResponse response = httpclient.execute(httppost); 
       HttpEntity r_entity = response.getEntity(); 

       int statusCode = response.getStatusLine().getStatusCode(); 
       if (statusCode == 200) { 
        // Server response 
        responseString = EntityUtils.toString(r_entity); 
       } else { 
        responseString = "Error occurred! Http Status Code: " 
          + statusCode; 
       } 

      } catch (ClientProtocolException e) { 
       responseString = e.toString(); 
      } catch (IOException e) { 
       responseString = e.toString(); 
      } 

      return responseString; 

     } 

     @Override 
     protected void onPostExecute(String result) { 
      Log.e(TAG, "Response from server: " + result); 

      // showing the server response in an alert dialog 
      showAlert(result); 

      super.onPostExecute(result); 
     } 

    } 

    /** 
    * Method to show alert dialog 
    * */ 
    private void showAlert(String message) { 
     AlertDialog.Builder builder = new AlertDialog.Builder(this); 
     builder.setMessage(message).setTitle("Response from Servers") 
       .setCancelable(false) 
       .setPositiveButton("OK", new DialogInterface.OnClickListener() { 
        public void onClick(DialogInterface dialog, int id) { 
         // do nothing 
        } 
       }); 
     AlertDialog alert = builder.create(); 
     alert.show(); 
    } 

} 

JAVA config:

package com.nkdroid.tinderswipe; 

/** 
* Created by Haze on 15.08.2016. 
*/ 

public class Config { 

    // File upload url (replace the ip with your server address) 
    public static final String FILE_UPLOAD_URL = "http://http://nwstudio.esy.es/AndroidFileUpload/uploads/fileUpload.php"; 

    // Directory name to store captured images and videos 
    public static final String IMAGE_DIRECTORY_NAME = "AndroidFileUpload"; 
} 
+0

'private void previewMedia' Warum poating Sie diesen Code? Was hat es mit dem Hochladen einer Datei zu tun? Bitte poste so wenig Code wie möglich. – greenapps

+0

versuchen Sie dies http://harshalbenake.blogspot.in/2016/04/hb-blog-108-file-upload-to-server-in.html –

+0

Über diese VorschauMedia, ist es für Video (ich benutze das nicht für jetzt, vielleicht im nächsten Patch der App). Ich lösche das nicht für jetzt: D – Tomasz

Antwort

2

empfehle ich Ihnen nicht AsyncTask für diesen Zweck zu tun, verwenden. Statt AsyncTask versuchen Bild senden mit Retrofit 2

UPDATE

Das ist mein Projekt Retrofit2Sample die Nutzung von Retrofit zeigt 2. Ich glaube, dass es hilft zu verstehen, wie es funktioniert und zeigen, wie man mit diesem tollen Rest-Client arbeitet.

Verwandte Themen