2012-02-20 13 views
0

私はアンドロイドアプリケーションからの画像をPHPサーバdbに保存しようとしています。 ここに私のコードは..ですjson配列経由でmysql dbに画像を保存する方法は?

アンドロイド:

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...!"; 
} 

?> 

が、実行しているとき、私は "不正なリクエスト" メッセージが表示されますアンドロイドアプリケーション。それはテキストのために正常に動作します。どのようにイメージを保存するには?誰も私を助けてくれますか?

おかげで...

+1

を使用してみてください、しかし、あなたのコードは明白なSQLインジェクションの脆弱性があります。文字列に 'mysql_real_escape_string()'を使うか、パラメタライズドクエリでPDOを使うのが良いでしょう(独自のSQLを連結するのは恐ろしいことです)! – Kitsune

+0

また、メインスレッドでhttp要求を行っています。 Plzは、アドバイスのためにhttp://developer.android.com/resources/articles/painless-threading.html – Macarse

+0

thxを読んでいます。私はまだこれについてテストしています。 – Manoj

答えて

2

はコード

の下 あなたの実際の質問とは関係のない
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); 
+1

サーバ側画像ファイルを読み込む方法として画像データを読み込もうとします – Vamshi

+0

私はテキスト、座標、画像を一緒に送る必要があります。どのように私は上記の方法でそれを行うことができますか? – Manoj

+1

私は私の答えを編集して、上記のようなペアリストに値を追加します... – Vamshi

関連する問題