2016-12-19 2 views
1

Я - неофит для android.since последние пару дней Мне приходится сталкиваться с какой-то проблемой, чтобы отправить мое изображение на сервер. У меня просто есть форма, которая включает в себя некоторые текстовые поля и изображение, которое нужно взять из библиотеки. Все работает отлично, за исключением загрузки изображения. Я пробовал большую часть учебников по google. Основная проблема заключается в том, что logcat не показывает никаких ошибок. Я не могу отслеживать, что на самом деле пошло не так. Это то, что я сделалandroid не может загрузить изображение на сервер

Я использовал этот код, чтобы получить изображение из Galary

private void showFileChooser() { 
     Intent intent = new Intent(); 
     intent.setType("image/*"); 
     intent.setAction(Intent.ACTION_GET_CONTENT); 
     startActivityForResult(Intent.createChooser(intent, "Select Picture"), PICK_IMAGE_REQUEST); 
    } 

protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
     super.onActivityResult(requestCode, resultCode, data); 

     if (requestCode == PICK_IMAGE_REQUEST && resultCode == RESULT_OK && data != null && data.getData() != null) { 
      filePath = data.getData(); 
      try { 
       bitmap = MediaStore.Images.Media.getBitmap(getContentResolver(), filePath); 
       schoolLogoUpload.setImageBitmap(bitmap); 

      } catch (IOException e) { 
       e.printStackTrace(); 
      } 
     } 
    } 

Я написал эту функцию для отправки выбранного изображения на сервер

public String getPath(Uri uri) { 
     Cursor cursor = getContentResolver().query(uri, null, null, null, null); 
     cursor.moveToFirst(); 
     String document_id = cursor.getString(0); 
     document_id = document_id.substring(document_id.lastIndexOf(":") + 1); 
     cursor.close(); 

     cursor = getContentResolver().query(
       android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI, 
       null, MediaStore.Images.Media._ID + " = ? ", new String[]{document_id}, null); 
     cursor.moveToFirst(); 
     String path = cursor.getString(cursor.getColumnIndex(MediaStore.Images.Media.DATA)); 
     cursor.close(); 

     return path; 
    } 


public void uploadMultipart() { 
     //getting the actual path of the image 
     String path = getPath(filePath); 

     //Uploading code 
     try { 
      String uploadId = UUID.randomUUID().toString(); 

      //Creating a multi part request 
      new MultipartUploadRequest(this, uploadId, UPLOAD_URL) 
        .addFileToUpload(path, "image") //Adding file 
        .setNotificationConfig(new UploadNotificationConfig()) 
        .setMaxRetries(2) 
        .startUpload(); //Starting the upload 

     } catch (Exception exc) { 
      Toast.makeText(this, exc.getMessage(), Toast.LENGTH_SHORT).show(); 
     } 
    } 

Это мой код, чтобы получить мой данные изображения на стороне сервера

if(Input::hasFile('image')) { 
      $file = Input::file('image'); 
      $destination_path = "uploads"; 
      $extension = Input::file('image')->getClientOriginalExtension(); 
      $file_name = str_random(20). "." . $extension; 
      Input::file('image')->move($destination_path, $file_name); 
     }else{ 
      return \Response::json([ 
       "error"=>["message"=>"Please select the college logo"] 
      ], 404); 
+0

Где вы звоните 'uploadMultipart()'? –

+0

Вы также хотели бы добавить 'exc.printStackTrace()' к вашему методу. –

+0

@mad_manny Я вызываю эту функцию внутри своей кнопки, которая отправляет данные на сервер. Может, помогите мне? – therameshbista

ответ

1

Я предполагаю, что у вас есть конвертация ted изображение до Base64. В основном формат Base64 преобразует изображение (или кодирует изображение) в формат String.

* Напишите Asynctask, который будет загружать изображения на сервер для вас *

Ниже Asynctask: -

private class AsyncUploadToServer extends AsyncTask<String, Void, String> 
{ 
    ProgressDialog pdUpload; 

    String imageData = ""; 

    @Override 
    protected void onPreExecute() { 
     super.onPreExecute(); 
     pdUpload = new ProgressDialog(MainActivity.this); 
     pdUpload.setMessage("Uploading..."); 
     pdUpload.show(); 
    } 

    @Override 
    protected String doInBackground(String... params) 
    { 
     imageData = params[0]; 
     HttpClient httpclient = new DefaultHttpClient(); 

     // URL where data to be uploaded 
     HttpPost httppost = new HttpPost(YOUR_URL_HERE); 

     try 
     { 
      // adding data 
      List<NameValuePair> dataToBeAdd = new ArrayList<>(); 
      dataToBeAdd.add(new BasicNameValuePair("uploadedImage", imageData)); 
      httppost.setEntity(new UrlEncodedFormEntity(dataToBeAdd)); 

      // execute http post request 
      HttpResponse response = httpclient.execute(httppost); 
      Log.i("MainActivity", "Response: " + response); 
     } 
     catch (ClientProtocolException ex) 
     { 
      ex.printStackTrace(); 
     } 
     catch (IOException ioe) 
     { 
      ioe.printStackTrace(); 
     } 
     return ""; 
    } 

    @Override 
    protected void onPostExecute(String s) { 
     super.onPostExecute(s); 
     pdUpload.dismiss(); 
     Toast.makeText(getApplicationContext(), "Image Uploaded Successfully..!!", Toast.LENGTH_SHORT).show(); 
    } 
} 

Надеется, что это поможет. :-)

P.S.:- Если вы не знаете много о AsyncTask, вот ссылка https://developer.android.com/reference/android/os/AsyncTask.html

+0

сэр, где я должен добавить этот код. Мне нужно заменить мой код выше или это полный код, который позволяет мне загружать мое изображение на сервер. Пожалуйста, помогите – therameshbista

+0

да, вы можете заменить свой код на это. Вам просто нужно вызвать эту асинтезную кнопку при событии нажатия кнопки. – itzswan

+0

Мне интересно, как вызвать класс внутри кнопки. Следующее, что мое выбранное изображение связано с вашим предложенным классом. – therameshbista

Смежные вопросы