Изображение не генерируется / не загружается на сервер - PullRequest
0 голосов
/ 26 декабря 2018

Я занимаюсь разработкой приложения для Android, в котором я хочу сохранить изображения на сервере (бесплатный сервер 000webhost). Для этого я кодирую свое изображение в строку, используя base64.И отправив эту строку методом POST, используя залп.Но изображение не генерируется на стороне сервера.Может кто-нибудь сказать мне, что не так?

upload.php

<?php

$servername = "localhost";
$database = "id8258200_image";
$username = "id8258200_qmine1";
$password = "";


$conn = mysqli_connect($servername, $username, $password, $database);


if (!$conn) {
   die("Connection failed: " . mysqli_connect_error());
 }

echo "Connected successfully";

 if(isset($_POST["image"])){

$encoded_string = $_POST["image"];

$image_name="img";
$decoded_string = base64_decode($encoded_string);

$path = "image/$image_name.jpeg";

$file = fopen($path, 'wb');

$is_written = fwrite($file, $decoded_string);
fclose($file);
echo "success";
 }
 else {
      echo "error";
 }
?>

Mainactivity.java

import android.app.ProgressDialog;
import android.content.Context;
import android.content.Intent;
import android.database.Cursor;
import android.graphics.Bitmap;
import android.net.Uri;
import android.os.AsyncTask;
import android.provider.MediaStore;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Base64;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.Toast;

import com.android.volley.AuthFailureError;
import com.android.volley.Request;
import com.android.volley.RequestQueue;
import com.android.volley.Response;
import com.android.volley.VolleyError;
import com.android.volley.toolbox.StringRequest;
import com.android.volley.toolbox.Volley;

import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;

public class MainActivity extends AppCompatActivity implements View.OnClickListener {

public static final String UPLOAD_URL = "https://qmine.000webhostapp.com/question/upload.php";


private int PICK_IMAGE_REQUEST = 1;

private Button buttonChoose;
private Button buttonUpload;
private Button buttonView;

private ImageView imageView;

private Bitmap bitmap;

private Uri filePath;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    buttonChoose = (Button) findViewById(R.id.buttonChoose);
    buttonUpload = (Button) findViewById(R.id.buttonUpload);
    buttonView = (Button) findViewById(R.id.buttonViewImage);

    imageView = (ImageView) findViewById(R.id.imageView);

    buttonChoose.setOnClickListener(this);
    buttonUpload.setOnClickListener(this);
    buttonView.setOnClickListener(this);
}

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);
}

@Override
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);
            imageView.setImageBitmap(bitmap);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

public String getStringImage(Bitmap bmp) {
    ByteArrayOutputStream baos = new ByteArrayOutputStream();
    bmp.compress(Bitmap.CompressFormat.JPEG, 100, baos);
    byte[] imageBytes = baos.toByteArray();
    String encodedImage = Base64.encodeToString(imageBytes, Base64.DEFAULT);
    Log.d("tr", "qwerty" + encodedImage);
    return encodedImage;
}

private void uploadImage() {

    RequestQueue queue = Volley.newRequestQueue(getApplicationContext());
    StringRequest request = new StringRequest(Request.Method.POST, UPLOAD_URL, new Response.Listener<String>() {
        @Override
        public void onResponse(String response) {

        }
    }, new Response.ErrorListener() {
        @Override
        public void onErrorResponse(VolleyError error) {
            Toast.makeText(getApplicationContext(), "errorrrr", Toast.LENGTH_SHORT).show();
        }
    }) {
        @Override
        protected Map<String, String> getParams() throws AuthFailureError {

            Map<String, String> Params = new HashMap<String, String>();
            String img = getStringImage(bitmap);
            Log.d("qw", "aasas" + img);
            Params.put("image", img);
            return Params;

        }

    };

    queue.add(request);

}

@Override
public void onClick(View v) {
    if (v == buttonChoose) {
        showFileChooser();
    }

    if (v == buttonUpload) {
        uploadImage();
    }

    if (v == buttonView) {
        viewImage();
    }
}

private void viewImage() {
    // startActivity(new Intent(this, ImageListView.class));
}
}

1 Ответ

0 голосов
/ 26 декабря 2018

Код выглядит хорошо для меня.Похоже, вопрос разрешения.Добавьте эти строки в начало вашего PHP-скрипта.

<?php
ini_set('display_errors', 1); // telling PHP to explicitly print all errors
error_reporting(E_ALL); // Show all notices, warnings and fatal errors

Второе, чтобы проверить, имеет ли папка достаточно прав для записи файла.Дайте разрешение на запись, если не там, и посмотрите, работает ли код.

Надеюсь, это поможет.Удачного кодирования!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...