如何通过json数组将图像保存在mysql数据库中?
问题描述:
我一直在试图将来自android应用程序的图像保存到php服务器数据库中。 这里是我的代码..如何通过json数组将图像保存在mysql数据库中?
安卓
public class TestCaseActivity extends Activity {
TextView tv;
String text;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
tv = (TextView)findViewById(R.id.textview);
text = "";
try {
postData();
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public void postData() throws JSONException{
// Create a new HttpClient and Post Header
HttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new HttpPost("http://uknwhu.site40.net/blitz/mydata2.php");
JSONObject json = new JSONObject();
Bitmap bitmapOrg = BitmapFactory.decodeResource(getResources(), R.drawable.ic_launcher);
ByteArrayOutputStream bao = new ByteArrayOutputStream();
bitmapOrg.compress(Bitmap.CompressFormat.JPEG, 90, bao);
byte [] ba = bao.toByteArray();
String ba1 = Base64.encodeBytes(ba);
try {
// JSON data:
json.put("name", "jmaraz");
json.put("position", "SE");
json.put("photo", ba1);
JSONArray postjson=new JSONArray();
postjson.put(json);
// Post the data:
httppost.setHeader("json",json.toString());
httppost.getParams().setParameter("jsonpost",postjson);
// Execute HTTP Post Request
System.out.print(json);
HttpResponse response = httpclient.execute(httppost);
// for JSON:
if(response != null)
{
InputStream is = (InputStream) response.getEntity().getContent();
BufferedReader reader = new BufferedReader(new InputStreamReader(is));
StringBuilder sb = new StringBuilder();
String line = null;
try {
while ((line = reader.readLine()) != null) {
sb.append(line + "\n");
}
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
is.close();
} catch (IOException e) {
e.printStackTrace();
}
}
text = sb.toString();
}
tv.setText(text);
}catch (ClientProtocolException e) {
// TODO Auto-generated catch block
} catch (IOException e) {
// TODO Auto-generated catch block
}
}
}
这里是我的PHP代码:
<?php
include_once("connection.php");
$json = $_SERVER['HTTP_JSON'];
$data = json_decode($json);
//header('Content-Type: application/json;charset=utf-8');
// all are texts
$name = $data->name;
$pos = $data->position;
$imageString = $data->photo;
$phoneNo = "123456789"; // for testing
// decoding the string
$realImage = base64_decode($imageString);
//$description =
//$latitude =
//$longitude =
$path = "images/".$phoneNo.".jpg";
$handle = fopen($path, 'wb');
$numbytes = fwrite($handle, $realImage);
fclose($handle);
$imageName = $path;
// trimming and removing spaces for identifier
$identifier = trim($name);
$identifier = str_replace(" ","",$identifier);
// inserting into database
$query1 = mysql_query("SELECT * FROM details WHERE identifier ='$identifier'");
$row = mysql_num_rows($query1);
if($row >0){
echo "Similar record found! Please change the name and try agin";
}else{
//$query2 = mysql_query("INSERT INTO details (phoneNo, identifier, name,description,latitude,longitude,imageName)
$query2 = mysql_query("INSERT INTO details (phoneNo, identifier, name,imageName)
VALUES('".$phoneNo."', '".$identifier."','".$name."','".$imageName."')");
echo "Done...!";
}
?>
但在运行时,我得到了 “错误的请求” 消息android应用程序。它适用于文本。如何保存图像?有谁能帮我吗?
谢谢...
答
尝试使用下面的代码
HttpClient httpClient = new DefaultHttpClient();
HttpContext localContext = new BasicHttpContext();
HttpPost httpPost = new HttpPost("serverurl");
List<NameValuePair> pairs = new ArrayList<NameValuePair>();
pairs.add(new BasicNameValuePair("username", name));
pairs.add(new BasicNameValuePair("RecipientMobileNumber", recepnumber));
pairs.add(new BasicNameValuePair("SenderMobileNumber", sendernumber));
pairs.add(new BasicNameValuePair("MessageBody", msg));
MultipartEntity entity = new MultipartEntity(HttpMultipartMode.BROWSER_COMPATIBLE);
for(int index=0; index < pairs.size(); index++) {
if(pairs.get(index).getName().equalsIgnoreCase("upload")) {
ContentBody cbFile = new FileBody(new File pairs.get(index).getValue()), "application/octet-stream");
entity.addPart(pairs.get(index).getName(), cbFile);
} else {
entity.addPart(pairs.get(index).getName(), new StringBody(pairs.get(index).getValue()));
}
}
httpPost.setEntity(entity);
HttpResponse response = httpClient.execute(httpPost, localContext);
无关你的实际问题,但你的代码有明显的SQL注入漏洞。你应该在字符串上使用'mysql_real_escape_string()',或者更好的方法是使用带参数化查询的PDO(连接你自己的SQL是一个可怕的想法!)。 – Kitsune 2012-02-20 14:29:09
您也在主线程中执行http请求。 PLZ阅读:http://developer.android.com/resources/articles/painless-threading.html – Macarse 2012-02-20 14:32:01
thx的意见..即时通讯仍在测试这一点。 – Manoj 2012-02-20 14:35:05