2016-01-18 2 views
0

В настоящее время я пытаюсь внедрить систему изображений профиля, однако она не работает вообще. Я уверен, что проблема заключается в скрипте php, который я использую. Я хочу подчеркнуть, что все мои другие скрипты php работают, поэтому скрипты для добавления пользователя, получения пользовательских данных и даже для получения изображения профиля. Я понятия не имею, что это может быть, поэтому я включаю и исходный код приложения. Если я попытаюсь отправить сообщение в php-файл, я всегда получаю 404, а не только в приложении, поэтому это должны быть скрипты php, но я понятия не имею, что может быть проблемой здесь. Процесс записи загрузок, но с использованием InputStreamReader просто не будет работать. Я действительно надеюсь, что кто-то может мне помочь, ни одно из решений, предложенных в отношении этого вопроса, похоже, не сократит его для меня.Android Java/PHP Загрузка изображения 404

Вызов Async Задача:

Uri filePath = data.getData(); 
Log.d("debugshit", "in if statement pic change"); 
try { 
    final Bitmap profilePic = MediaStore.Images.Media.getBitmap(getContentResolver(), filePath); 
    ServerRequest sr = new ServerRequest(this, "Updating Profile..."); 
    sr.updateProfilePic(activeUser, profilePic, new ServerCallback() { 
     @Override 
     public void done(User returnedUser) { 

     } 

     @Override 
     public void done(boolean success) { 
      if (success) { 
       ((ImageView)header.findViewById(R.id.navProfileImage)).setImageBitmap(profilePic); 
       Toast.makeText(MainActivity.this, "Profile Picture updated", Toast.LENGTH_SHORT).show(); 
      } 
     } 
    }); 
} 
catch (IOException e) { 
    e.printStackTrace(); 
} 

Сервер класса Request:

public void updateProfilePic(User user, Bitmap profilePic, ServerCallback callback) { 
     progressDialog.show(); 
     new UpdateProfilePicTask(user, profilePic, callback).execute(); 
    } 

    public class UpdateProfilePicTask extends AsyncTask<Void, Void, Boolean> { 

     User user; 
     Bitmap profilePic; 
     ServerCallback callback; 

     public UpdateProfilePicTask(User user, Bitmap profilePic, ServerCallback callback) { 
      this.user = user; 
      this.profilePic = profilePic; 
      this.callback = callback; 
     } 

     @Override 
     protected Boolean doInBackground(Void... params) { 
      try { 
       URL url = new URL("http://server/set_profilepic.php"); 
       HttpURLConnection con = (HttpURLConnection) url.openConnection(); 
       con.setRequestMethod("POST"); 
       con.setDoOutput(true); 
       con.setDoInput(true); 

       OutputStream os = con.getOutputStream(); 
       OutputStreamWriter osw = new OutputStreamWriter(os, "UTF-8"); 

       ContentValues contentValues = new ContentValues(); 
       contentValues.put("id", user.getId()); 
       contentValues.put("img_name", user.getUsername() + "_" + Calendar.getInstance().getTimeInMillis() + ".png"); 
       contentValues.put("encoded_img", encodeImage(profilePic)); 

       Log.d("debugshit", encodeParams(contentValues)); 

       con.connect(); 
       osw.write(encodeParams(contentValues)); 
       osw.flush(); 

       BufferedReader br = new BufferedReader(new InputStreamReader(con.getInputStream())); 
       String response = br.readLine(); 
       Log.d("debugshit", response); 

       br.close(); 
       osw.close(); 
       os.close(); 
       con.disconnect(); 

       return response.equals("OK"); 
      } 
      catch (Exception e) { 
       e.printStackTrace(); 
      } 
      return false; 
     } 

     @Override 
     protected void onPostExecute(Boolean success) { 
      progressDialog.dismiss(); 
      callback.done(success); 

      super.onPostExecute(success); 
     } 
    } 

private String encodeImage(Bitmap image) { 
     ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); 
     image.compress(Bitmap.CompressFormat.PNG, 100, outputStream); 
     byte[] imageBytes = outputStream.toByteArray(); 
     return Base64.encodeToString(imageBytes, Base64.DEFAULT); 
    } 

    private String encodeParams(ContentValues values) throws UnsupportedEncodingException { 
     StringBuilder sb = new StringBuilder(); 
     Set<Map.Entry<String, Object>> entrySet = values.valueSet(); 
     boolean first = true; 

     for(Map.Entry entry : entrySet) { 
      String key = entry.getKey().toString(); 
      String value = entry.getValue().toString(); 

      if (first) 
       first = false; 
      else 
       sb.append("&"); 

      sb.append(URLEncoder.encode(key, "UTF-8")); 
      sb.append("="); 
      sb.append(URLEncoder.encode(value, "UTF-8")); 
     } 
     return sb.toString(); 
    } 

set_profilepic.php

<?php  

    header('Content-type: bitmap; charset=utf-8'); 

    $id = $_POST['id']; 
    $imgname = $_POST['img_name']; 
    $img = $_POST['encoded_img']; 

    if (isset($imgname, $img)) { 
     $decodedimg = base64_decode($img); 
     $path = 'profile_images/' . $imgname;  

     $file = fopen($path, 'wb'); 
     $written = fwrite($file, $decodedimg); 
     fclose($file); 

     if ($written > 0) { 
      $con = mysqli_connect("server", "user", "pw", "db"); 

      $statement = mysqli_prepare($con, "UPDATE User SET profilepic = ? WHERE id = ? "); 

      mysqli_stmt_bind_param($statement, "si", $path, $id); 
      $success = mysqli_stmt_execute($statement); 

      mysqli_stmt_close($statement); 
      mysqli_close($con); 

      if ($success) { 
       echo "OK"; 
      } 
      else { 
       echo "Error"; 
      } 
     } 
     else { 
      echo "Error"; 
     } 
    } 
    else { 
     echo "Error"; 
    } 

?> 
+0

где находится ваш сервер. На вашем компьютере или на удаленном месте? –

+0

'Я всегда получаю 404, а не только в приложении, поэтому это должны быть скрипты php. Неверный вывод. Теперь что значит 404? – greenapps

+0

@greenapps Я знаю, что означает 404, но когда я иду на страницу, эта ошибка не возникает и скрипт выполняется. – user3002449

ответ

0

Хорошо, мне удалось исправить свою ошибку. Проблема заключалась в том, что мне пришлось изменить свои права, чтобы заставить это работать. Разрешение записи было отключено по умолчанию, поэтому я не смог загрузить файл, и он сбросил ошибку 404.

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