Android Bitmap图像作为blob数据类型上传到mysql数据库

时间:2014-09-12 18:53:16

标签: mysqli

Bimap图片未在服务器上传。在数据库映像表中有一个blob数据类型属性。我想在数据库中保存位图图像

 class savebitmap extends AsyncTask<String, Void, String> {

    @Override

        protected String doInBackground(String... params) {

     try {
         // Save the image to the SD card.
        //File file = new File(Environment.getExternalStorageDirectory(),
        //System.currentTimeMillis() + ".png");
        //FileOutputStream stream = new FileOutputStream(file);
        //bitmap.compress(CompressFormat.PNG, 100, stream);

        //convert to byte

        ByteArrayOutputStream bytedata = new ByteArrayOutputStream();
        bitmap.compress(CompressFormat.JPEG, 100, bytedata);
        byte[] data = bytedata.toByteArray();
        String imagedata = Base64.encodeToString(data, Base64.DEFAULT);
        String name="prescription";
        //save image to mysql


        httpclient=new DefaultHttpClient();
        httppost= new HttpPost("http://10.0.2.2/android/image.php"); 
        nameValuePairs = new ArrayList<NameValuePair>();
        nameValuePairs.add(new BasicNameValuePair("name",name));
        nameValuePairs.add(new BasicNameValuePair("image",imagedata)); 
        httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
        response=httpclient.execute(httppost);

        HttpEntity entity = response.getEntity();            

        InputStream is = entity.getContent();

        Log.e("Connection", "connection success ");
        Log.e("bitmap", imagedata);

     } catch (Exception e) {
         Log.e("upload failed", e.toString());
     }



    return null;
 }
 }

我的php文件从http请求中恢复数据并插入数据库

   <?php


  mysql_connect("localhost","root","") or die (mysql_error());
  mysql_select_db("image") or die (mysql_errno());


 $base= $_REQUEST['image'];
 $name= $_REQUEST['name'];
 $buffer = base64_decode($base);
 $buffer = mysql_real_escape_string($buffer);

$flag['code']=0;

if($q=mysql_query("INSERT INTO image ('name','image')
  VALUES ('$name',$buffer')"))
{
$flag['code']=1;

}

print(json_encode($flag));

mysql_close(); 
mysql_close();

&GT;

logcat的

09-12 19:07:43.486:D / dalvikvm(816):GC_FOR_ALLOC释放<1K,5%免费6131K / 6388K,暂停44ms,总计44ms 09-12 19:07:43.666:D / gralloc_goldfish(816):未检测到GPU仿真的仿真器。 09-12 19:07:46.946:D / dalvikvm(816):GC_FOR_ALLOC释放2507K,43%免费3651K / 6388K,暂停68ms,总计69ms 09-12 19:07:46.946:I / dalvikvm-heap(816):将堆(frag case)增长到4.974MB,用于1334416字节分配 09-12 19:07:46.986:D / dalvikvm(816):GC_CONCURRENT释放1K,23%释放4952K / 6388K,暂停7ms + 3ms,总计37ms 09-12 19:07:46.986:D / dalvikvm(816):WAIT_FOR_CONCURRENT_GC阻止了17ms 09-12 19:07:49.766:D / dalvikvm(816):GC_CONCURRENT释放577K,20%免费5124K / 6388K,暂停4ms + 7ms,总计44ms 09-12 19:07:50.946:E / Connection(816):连接成功

1 个答案:

答案 0 :(得分:0)

您的SQL语法出错:

INSERT INTO image ('name','image') VALUES ('$name',$buffer')

请注意,您错过了第二个参数的开头报价。它应该是:

INSERT INTO image ('name','image') VALUES ('$name','$buffer')
                                                   ^--- right there

您还因某种原因尝试关闭连接两次:

mysql_close(); 
mysql_close();

很有可能会导致错误。此外,您永远不会检查SQL查询的结果或由此产生的任何错误情况。在连接到数据库时检查错误,但在交互时检查错误。因此,数据库很有可能告诉您究竟是什么错误并且您只是忽略它。当某些事情没有按预期行事时,最好首先看一下这些错误。

此外, 这很重要 ,您的代码 对SQL注入攻击 。您希望从阅读this开始。它将帮助您了解SQL注入攻击是什么以及如何保护您的代码。简而言之,您正在执行用户输入,就好像它是代码一样。这允许任何用户在未经您许可的情况下在您的服务器上执行任何代码,这显然是一件非常糟糕的事情。