图像从Android到MySQL Blob

时间:2015-09-25 09:31:41

标签: php android mysql imageview blob

大家好日子!正如标题所说,我尝试将Image从ImageView加载到MySQL。我想像MySQL中的Blob一样保存它。

我已经看到了几个关于此的问题,但在我的案例中没有答案:我仍然被困住了!

以下是我的XML ImageView:

<ImageView
                    android:id="@+id/das_photoib"
                    android:layout_width="150dp"
                    android:layout_height="150dp"
                    android:maxWidth = "150dp"
                    android:maxHeight="150dp"
                    android:layout_gravity="center_horizontal"/>

以下是我的JAVA活动

rootView = inflater.inflate(R.layout.devenirassistant, container, false);
photoprofil = (ImageView) rootView.findViewById(R.id.das_photoib);

在同一个活动中,当我想上传图片时,我把它放在ContentValues中:

ContentValues cv = new ContentValues();
Bitmap bitmap = ((BitmapDrawable)photoprofil.getDrawable()).getBitmap();
ByteArrayOutputStream baos = new ByteArrayOutputStream();
                        bitmap.compress(Bitmap.CompressFormat.JPEG, 100, baos);
byte[] b = baos.toByteArray();
cv.put("image", Arrays.toString(b));

然后我调用一个AsyncTask,它使用contentValues作为参数调用php文件本身。 在php文件中,我得到了&#34;图像&#34;数据,我尝试将其加载到MySQL&#34;图像&#34;表格的一行&#34; image_personne&#34;,已被定义为&#34; BLOB&#34;。我是这样做的:

    if (isset($_POST['image'])){
                $image = imagecreatefromstring(base64_decode($_POST['image']));

                $request5 = "INSERT INTO image_personne (id_personne, isDeleted, image, isModere) VALUES ({$_POST['id']}, '0', $image, 0)";

$result5 = mysqli_query($connexion,$request5) or die(mysqli_error($connexion));
            }

没有错误,但是没有错误加载!你能帮我调试一下吗?谢谢!

这就是现在所做的:

Android方面:

ContentValues cv = new ContentValues();
Bitmap bitmap = ((BitmapDrawable)photoprofil.getDrawable()).getBitmap();
ByteArrayOutputStream baos = new ByteArrayOutputStream();
                        bitmap.compress(Bitmap.CompressFormat.JPEG, 100, baos);
byte[] b = baos.toByteArray();
cv.put("image", Base64.encode(b,Base64.DEFAULT));

Php方面:

$request5 = "INSERT INTO image_personne (id_personne, isDeleted, image, isModere) VALUES (?,?,?,?)";

            $image = $_POST['image'];
            $id = $_POST['id'];
            $del = '0';
            $mod = '0';
            $stmt = $connexion->prepare($request5); //prepare the statements
            $stmt->bind_param("isbi", $id, $del, $null, $mod ); //bind parameter
            $stmt->send_long_data(0, $image);   //add blob data to statement
            $stmt->execute();

2 个答案:

答案 0 :(得分:0)

这将有效,将其另存为byte[]数组,而不是Array.toString()

ContentValues cv = new ContentValues();
Bitmap bitmap = ((BitmapDrawable)photoprofil.getDrawable()).getBitmap();
ByteArrayOutputStream baos = new ByteArrayOutputStream();
                        bitmap.compress(Bitmap.CompressFormat.JPEG, 100, baos);
byte[] b = baos.toByteArray();
cv.put("image", b);

答案 1 :(得分:0)

我会尝试回答你的php方面。在这里,我假设$_POST['image']作为base64_encode编码格式的文件输入。所以我们将它作为base64编码格式插入到数据库中作为blob。也将使用

  1. 我们收到base64_encod格式的数据
  2. 将其作为blob保存在数据库中
  3. 检索数据并解码从字符串

    创建的图像
    if (isset($_POST['image']))  {    $request5 = "INSERT INTO image_personne (id_personne, isDeleted, image,sModere)
     VALUES (?, ?, ?,?)";  //statement for db update
        $image = $_POST['image'];     //assign image the received data
        $id = $_POST['id'];   //assign values to variables
        $isdel = '0';
        $ismod = 0;
        $stmt = $connexion->prepare($request5); //prepare the statements
        $stmt->bind_param("isbi", $id, $isdel, $null, $ismod ); //bind parameter
        $stmt->send_long_data(0, $image);   //add blob data to statement
        $stmt->execute();  //execute the statement
        }
    
  4. 更新

       Bitmap bitmap = BitmapFactory.decodeResource(getResources(),R.drawable.icon);
    ByteArrayOutputStream stream = new ByteArrayOutputStream();
    bitmap.compress(Bitmap.CompressFormat.PNG, 90, stream); 
    byte [] byte_arr = stream.toByteArray();
    String image_str = Base64.encodeBytes(byte_arr);
    

    您可以尝试使用此方法将图像文件转换为字符串。