2014-09-12 151 views
0

Bimap图像不在服务器上。在数据库映像表中有一个blob数据类型属性。我想保存位图图像数据库Android位图图像上传到mysql数据库作为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请求recive的数据,并插入到数据库

<?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(); 

?>

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 ):为1334416字节的分配增加堆(碎片情况)至4.974MB 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的+ 7毫秒,总44ms 09-12 19:07:50.946:E /连接(816):连接成功

+0

您忘记了提问的部分。这段代码是否以某种方式失败?你有错误吗?意外的行为?你在问什么? (另外,请注意,你的代码中有一个***开放性的***注入漏洞***,你的SQL语句中也有一个语法错误,我确信数据库告诉你一个错误消息,你也尝试关闭数据库两次,这可能会导致另一个错误。) – David 2014-09-12 18:55:16

+0

亲爱的mybitmap图像转换成字节数组不上载在服务器端? – 2014-09-12 18:58:56

+0

在建立连接时没有错误 – 2014-09-12 18:59:55

回答

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注入攻击是什么以及如何保护您的代码。总之,你是执行用户输入,就好像它是代码。这允许任何用户未经您的许可在您的服务器上执行任何代码,这显然是一件非常糟糕的事情。

+0

感谢您对sql注入的赞美。 – 2014-09-12 19:15:03

+0

但我尝试之后,纠正相同的结果 – 2014-09-12 19:15:27

+0

@awaiskhansar:与对问题的意见,*这是什么结果*?此处没有人可以为您调试您的代码。你需要确定它的失败。 – David 2014-09-12 19:20:01