(android+PHP)-将字符串转换为图像并将其存储在数据库中


(android + PHP) - convert string to image and store it in database

我正在尝试使用截击库上传图像。我确信我能够将我的图像转换为字符串并将其发送到服务器端。。因为当我从服务器端"回显"图像"时。我收到的字符串与响应相同。但当我使用php时,下面的代码会解码字符串图像并将其上传到数据库。。。我在数据库的"img"列中得到一个没有任何扩展名的文件名。(请参阅下面的图片链接,了解我想说的内容)我将在下面上传我的各种文件(mainACctivity、php数据库映像以及字符串形式的upload.php文件和映像)。

最有可能的错误在PHP方面。。我只是想不通。作为一名java开发人员。(对php代码不太了解)帮我解决这个问题。如果我的Java文件中有什么问题,请告诉我。

PS:很抱歉英语不好

我的upload.php文件

 <?php
    $host="localhost"; //replace with database hostname 
    $username="xxxx"; //replace with database username 
    $password="xxxx"; //replace with database password 
    $db_name="snapcash"; //replace with database name
    $con=mysql_connect($host,$username,$password);
    $db=mysql_select_db($db_name);
    if($_SERVER['REQUEST_METHOD']=='POST'){
    $image = $_POST['image'];
    $name = $_POST['name'];
    //require_once('dbConnect.php');
    $sql ="SELECT id_img FROM image ORDER BY id_img ASC";
    $res = mysqli_query($con,$sql);
    $id = 0;
    while($row = mysqli_fetch_array($res)){
    $id = $row['id'];
 }
 $path = "images/$id.png";
 $actualpath = "ec2-54-191-118-200.us-west-2.compute.amazonaws.com/$path";
 $sql = "INSERT INTO image (photo,name) VALUES ('$actualpath','$name')";
 if(mysqli_query($con,$sql)){
     file_put_contents($path,base64_decode($image));
     echo "Successfully Uploaded";  //this never echos :(
 }
 else{
     echo "$image"  // am receiveing this echo i.e. the image in string form
 }
mysqli_close($con);
 }else{
     echo "Error";
 }
?>

MainActivity.java

package absdevelopers.com.volleyuploadimage;
import android.app.ProgressDialog;
import android.content.Intent;
import android.graphics.Bitmap;
import android.net.Uri;
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.View;
import android.widget.Button;
import android.widget.EditText;
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.Hashtable;
import java.util.Map;
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
private Button buttonChoose;
private Button buttonUpload;
private ImageView imageView;
private EditText editTextName;
private Bitmap bitmap;
private int PICK_IMAGE_REQUEST = 1;
private String UPLOAD_URL = "http://ec2-54-191-118-200.us-west-2.compute.amazonaws.com/img1.php";
private String KEY_IMAGE = "image";
private String KEY_NAME = "name";

@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);
    editTextName = (EditText) findViewById(R.id.editText);
    imageView = (ImageView) findViewById(R.id.imageView);
    buttonChoose.setOnClickListener(this);
    buttonUpload.setOnClickListener(this);
}
@Override
public void onClick(View v) {
    if (v == buttonChoose) {
        showFileChooser();
    }
    if(v == buttonUpload){
        uploadImage();
    }

}
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) {
        Uri filePath = data.getData();
        try {
            //Getting the Bitmap from Gallery
            bitmap = MediaStore.Images.Media.getBitmap(getContentResolver(), filePath);
            //Setting the Bitmap to ImageView
            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);
    return encodedImage;
}
private void uploadImage(){
    //Showing the progress dialog
    final ProgressDialog loading = ProgressDialog.show(this, "Uploading...", "Please wait...", false, false);
    StringRequest stringRequest = new StringRequest(Request.Method.POST, UPLOAD_URL,
            new Response.Listener<String>() {
                @Override
                public void onResponse(String response) {
                    //Disimissing the progress dialog
                    loading.dismiss();
                    //Showing toast message of the response
                    Toast.makeText(MainActivity.this, response , Toast.LENGTH_LONG).show();
                }
            },
            new Response.ErrorListener() {
                @Override
                public void onErrorResponse(VolleyError volleyError) {
                    //Dismissing the progress dialog
                    loading.dismiss();
                    //Showing toast
                    Toast.makeText(MainActivity.this, "volley Error", Toast.LENGTH_LONG).show();
                }
            }){
        @Override
        protected Map<String, String> getParams() throws AuthFailureError {
            //Converting Bitmap to String
            String image = getStringImage(bitmap);
            Log.i("hello",image);
            //Getting Image Name
            String name = editTextName.getText().toString().trim();
            //Creating parameters
            Map<String,String> params = new Hashtable<>();
            //Adding parameters
            params.put(KEY_IMAGE, image);
            params.put(KEY_NAME, name);
            //returning parameters
            return params;
        }
    };
    //Creating a Request Queue
    RequestQueue requestQueue = Volley.newRequestQueue(this);
    //Adding request to the queue
    requestQueue.add(stringRequest);
}

 }

数据库图像

这是我的数据库图像,请查看

在java(android)端生成的字符串不同图像的不同

/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB
                                                                      AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQH/2wBDAQEBAQEBAQEBAQEBAQEBAQEBAQEB
                                                                      AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQH/wAARCAEgAgADASIA
                                                                      AhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQA
                                                                      AAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3
                                                                      ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWm
                                                                      p6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEA
                                                                      AwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSEx
                                                                      BhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElK
                                                                      U1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3
                                                                      uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD/AD/6
                                                                      KKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAoo
                                                                      ooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiii
                                                                      gAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKA
                                                                      CiiigAooooAKKKKACiiigAoqxViCxuLjPb+vLdfXgE47E9ck0AZ9WPI9/wBf/sa7eD4c+Op5fs48
                                                                      K69n20Vs9W9vbcOc9eOprmhB9hmNtf291m0vAL2zPp8wB9jhec9QRyTkgAzPJm9/zNHkze/5mvq7
                                                                      4+fAG6+EfxW8O/Cy/t9V0LUvENl4Qb7Hq+T9hbXmcYbrxs/sVuR03ZJwK4HxH4J1PwZ4S8T+HvFu
                                                                      k3nhjx54V8YaRe32i6vZNpurDR9d0JyqENjA3qHwDgLypDZBAPCKKtXUE8MjLP8Ae9fX5m9+OevX
                                                                      jGSTiqtABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRR
                                                                      QAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFWr
                                                                      PyPMPn/d4x9dzev4/wBP4qAGeTN7/matD7RPn/j6PT26Fv8AH6dO4OfoH4Q+Kfg5oRkPjTw/qGq6
                                                                      iCRZNc2K6kljgsMoo2kL7BAQGUkDv9HeFPF/7JGu/Enw3qeq2+laDpg/tUa3aax4JH/CJ35JfHy7
                                                                      i2Dg5zxnGTuOCAfC2heHfEV+SbHw/d3dvkD7WdGLY+ZuckEYOB0YnHJ55b9Jvgj+yr+0d4kh8N+I
                                                                      YPgFql1/wj17/wASTWcHTO7c9D4V8Tev4jB+9n9ufgt+yf8ABr4kaz4I1D4Q6d4N8Zabq2ii/vbz
                                                                      /iRanqx1fLcHw/j3+uOxBxX9F37Hn7FmjaFNpviHxz4d/szRfDoFhZeDrPRP+QfyfQH6duo6lTQB
                                                                      +Hn7D/8AwSg/au8Ra+fiF4t/Z78TjTdXvlA0a00TQdT1aw8JFmAA8Qlf+EWy2BgAkk44zy3x7/wV
                                                                      i/4JJ658Nvh/+0x8cvDWgabaeIfg34o8JeLvFF1Zsw1TUfh14jE0b8AYz4NRNBUn7zKxBYqDX+l3
                                                                      q+ufCv4J+E9duILjTNLtdJsRf3tnZ3w/tXUCGbjqDz+PGckE8/yc/wDBRvxH4E/aC8AeMdG8C/tx
                                                                      Wnwk0XxXrXi3wj41+G2sa3oep+E/GA18ynxDoPiHxBn249sjsSQD8jPGvhv9jn/gqB/wUJ/4JLeH
                                                                      r7xXp/g3TfiX+yBql3qHiXRzbSNqP7RngNLrxB4e8B64GMkjRjxJoLeEm8KQ7vHKOYPh1I4m+xuf
                                                                      p/8A4LOf8E//AIfftf8A/BNdP2yfhjoulW37Wn7Ca6P8JPjzpGkKx1T4m/Cbw3J/wj8bgeYP3vgz
                                                                      w2X8VCTafLt9G8bqE3tl/wAZ9M/Yf8e/se+Mvhb4x+JHx/8AB2l2vwH8f6r8WPgreeDvFJ1PVvEX
                                                                      g8N4ZPiDXfAHI/4RrxKPE0a4GcD4gKvdcn+23wX8BPAfxv8A+CUPxJ8Y/Bv4hnVB4w+Bni74k2Hi
                                                                      ay0/RdN1b4oaWfAPifxEnh/4x7UbxR4jVhr5G+R1XeyIMu6mgD/KL1VdEbwfoV8lyx8Q/a9Usb+0
                                                                      PVdICFtEbAGNq7SR1JXGSSc159X0Z8dvhz4q8KeIxr+peH7rSvDni6PSb7w3fLZumk6gH8DeG/EG
                                                                      NEY8NHt14Nhflwy5y6vXznQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUU
                                                                      AFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQA
                                                                      UUUUAFFFFABWhZQG4mNt245692zj6/jkbvRs59Twf64/U/8AoVAH3f8AB79hXxt8X4bbUrDx34C0
                                                                      DT7oqbo3Wtf2j/ZZDMwOuBAFTJJPyjryAGBNe+aB/wAEofjN4y+Imm+DfBus/wBqaJdXg0//AITE
                                                                      aFri6Q2rBy2NBAQF+cEFiSOOuMj2r9hnxv4FttavPBlzrBGjXOjaPp9n4kOtaECCG8UDBB6HOvc5
                                                                      5zoJBBIr+jb9kP44/Ar4cab4n06+8ZaXpem/8Ta/vftn/IWPPin/AJmDP/QteHvfAI6AcgH8pfg7
                                                                      9l39sj9n74o2/h3wn4h13wZ4kutaGn2V7o2ia9qmeW558J4BwpAA468Arz/Wf/wTW8K/t9ftLaBd
                                                                      /Av9rv4qfFC6Hh7+x/8AhFvGNnrg8C6Vp/hDd4nH9gHw/wCG/CX/AAlR48P8kDqQNoPNfSP7Bng7
                                                                      9nn9pb44/ET4hX+o2vjLxZpN6P8Alx/sv+0NXJP/AAkPYn/hGfBf/CPaB+pyc5r90/gN8MNF+Cnx
                                                                      RuvGMFtdW2m6tov2+zvL0Z1bUR/YHiYYPHf/AIkHfjuSaAPxY/aK/wCCT3jLVtSu/AtjrWvXXhP+
                                                                      xft9jrP2HXfDH9oAFwP+Eg8P7e/H4YzgYr+Z/wD4LB/8EofFH7K/gPXvFmr+KbbxB4k8D3Wl67rV
                                                                      mtpr8ZXwn4h12dY5A3iIA/u2Ik28B/8AVsSpav8ASX+Efxb8K/FbWfHXjLSbnS7X7JZ6PYWP9sH/
                                                                      AJB45/4SHqSev484yAXr+Yr/AILY+B9O/ak+OHwP+Gl7qOg2vwVx/wALZ/ag8Ykf2cPD3wM8A+IJ
                                                                      fEPh7QTuJGfjP4k8Q6ER4RPO7QQwbcN1AH88ngn/AIJo+KP2u/8Aglp4e/at8L/ELxVqXiD4JWek
                                                                      a94z8AM39raXqHg7f4nOv67oLrGo8OEeGQpbwiFQFtfB2qMgf1If8G/F98LD+xtovg/V/EVqbf4e
                                                                      +GdI8B+Kf7ZvR/a1h4S1/Qc+v/Isnv7jGf4j4j/wTc/bM/YW/Zo/4Jsfteah458ZaB4Y8FeLrP4i
                                                                      3/w+8NazohGleIPCGgeH28O+HtB8O/8AQ0HIHBOMbvmyMH+TrwP/AMFZvFn7Kfx1g+In7JK6ZoWl
                                                                      3Tare634c8SXuvf2PqGk/Pjw/wCIdB3AZKpuAJztJGTgmgD9iP8AguV/wTK8B/Db

在PHP端中尝试此代码

<?php
$host="localhost"; //replace with database hostname 
$username="root"; //replace with database username 
$password=""; //replace with database password 
$db_name="mydb"; //replace with database name
$con=mysql_connect($host,$username,$password);
$db=mysql_select_db($db_name);
 $name = $_REQUEST['name']; //image name
 $image = $_REQUEST['image']; //image in string format
 $user=$_REQUEST['User_ID'];
 $decodedImage = base64_decode($image);
 $image_file=time().rand(1111,9999);
 $name=$name.$image_file;
 $base_path='/var/www/html/uploads/';
    file_put_contents($base_path.$name.".jpg", $decodedImage);
         mysql_query("INSERT into `image`(`img`,`User_ID`,`date`) values ('".$image_file.".jpg','$user',now() )");
      echo mysql_insert_id();
?>