2016-09-20 75 views
0

我知道这个问题已经被问了很多次,但我真的有理解发生了什么存储在数据库中的图像,并检索它呼应的JSON

一个问题,我有一个项目,使一个使用Android应用相同的数据库作为一个网站我的合作伙伴正在

和我的问题正在与图像

我知道,我们不应该存储图像数据库....但我们有太多这里

的图像越来越商店d在数据库为BLOB 和它的网站 上却没有关于我的应用程序

我加载到应用中的一些从网站 和一些上传到数据库中的图像的工作的罚款我已经使用界面上传SQL WAMP服务器

而且做工精细

,但是当我从我的应用程序上传图片到数据库 当我把它抓回来就完全不

显示在这里就是我正在做

我开始的意图的拾取的图像与此代码

Intent intent = new Intent(); 
      intent.setType("image/*"); 
      intent.setAction(Intent.ACTION_GET_CONTENT); 
      startActivityForResult(Intent.createChooser(intent,"Select Picture"), 1); 

和ononActivityResult

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    super.onActivityResult(requestCode, resultCode, data); 
    if (resultCode == RESULT_OK) { 
     if (requestCode == 1) { 
      Uri selectedImageUri = data.getData(); 
      try { 
       PickedImage= MediaStore.Images.Media.getBitmap(this.getContentResolver(), selectedImageUri); 

       nPostImage.setImageBitmap(PickedImage); 

       ByteArrayOutputStream baos = new ByteArrayOutputStream(); 
       PickedImage.compress(Bitmap.CompressFormat.PNG, 100, baos); 
       nPostImageBytes = baos.toByteArray(); 

      } catch (IOException e) { 
       Toast.makeText(this,"Error Selecting Picture",Toast.LENGTH_SHORT).show(); 
       e.printStackTrace(); 
      } 
     }// if picking a picture 
    }//if ok 
}//On activity get result 

,然后我调用此方法,该数据上传到数据库 使用凌空

private void AddPost(final String UserID, final String UserType, final String nText, final byte[] nImage) 
{ 
    final ProgressDialog loading=ProgressDialog.show(this,"please wait...","adding",false,false); 

    String url="http://192.168.43.178/studentpool/add_post.php"; 

    StringRequest stringRequest=new StringRequest(Request.Method.POST, url, new Response.Listener<String>() { 
     @Override 
     public void onResponse(String response) { 
      loading.dismiss(); 
      try { 
       JSONObject jsonObject=new JSONObject(response); 
       if(jsonObject.getInt(LoginActivity.TAG_SUCCESS)==1) 
       { 
        loading.dismiss(); 
        Toast.makeText(AddPostActivity.this,"Added Successfully",Toast.LENGTH_SHORT).show(); 

        Intent intent=new Intent(AddPostActivity.this,MainActivity.class); 
        intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
        startActivity(intent); 
       } 
       else 
       { 
        loading.dismiss(); 
        Toast.makeText(AddPostActivity.this,jsonObject.getString("message"),Toast.LENGTH_SHORT).show(); 
       } 
      } catch (JSONException e) { 
       e.printStackTrace(); 
       Toast.makeText(AddPostActivity.this,"Error adding",Toast.LENGTH_SHORT).show(); 
      } 
     } 
    }, new Response.ErrorListener(){ 
     @Override 
     public void onErrorResponse(VolleyError error) { 
      error.printStackTrace(); 
     } 
    }) { 
     @Override 
     protected Map<String, String> getParams() throws AuthFailureError { 
      Map<String, String> params = new HashMap<>(); 
      params.put("id",UserID); 
      params.put("type",UserType); 
      params.put("text",nText); 
      params.put("image",Base64.encodeToString(nImage,Base64.DEFAULT)); 

      return params; 
     } 
    }; 

    RequestQueue requestQueue = Volley.newRequestQueue(this); 
    requestQueue.add(stringRequest); 
}//AddPost} 

这是我的php代码

<?php if($_SERVER['REQUEST_METHOD']=='POST'){ 
$id = $_POST['id']; 
$text= $_POST['text']; 
$image=$_POST['image']; 
$type=$_POST['type']; 

require_once __DIR__ . '/db_config.php'; 

$con = mysqli_connect(DB_SERVER,DB_USER,DB_PASSWORD,DB_DATABASE); 

$dt = new DateTime(); 
$dt->add(new DateInterval('PT3H')); 

$result=mysqli_query($con,"INSERT INTO posts(user_id,text,post_image,date,type) VALUES ('$id','$text','$image','".$dt->format('Y-m-d h:i:s')."','$type')"); 

if ($result) 
{ 

//success 
$response["success"] = 1; 

echo json_encode($response); 

} 
else 
{ 
    $response["success"] = 0; 
    $response["message"] = "Error adding the post"; 

    echo json_encode($response); 
}}else{ 
$response["success"] = 0; 
$response["message"] = "Missing required data"; 

// echo no users JSON 
echo json_encode($response); }//no data ?> 

我试图改变post_image类型MEDIUMTEXT,看看是获得存储在数据库中

和正常工作(从界面上载的)图像具有这种格式的

ÿØÿàJFIFÿÛC...

从应用程序上传的一个具有这种格式

/9J/4AAQSkZJRgABAQAAAQABAAD/2wBD ..

我试图将其存储在数据库中 之前对图像进行编码,但我得到了一个JSONexception

请帮助,如果你知道这个

和遗憾,对于长的问题什么...

谢谢为你的时间

+0

你很容易受到[sql注入攻击](http://bobby-tables.com)。并且您的应用正在使用base64编码进行上传。 –

+0

我知道... 我们只是在本地服务器上运行这个 – Mark

+0

我稍后会正确上传mages ...它只是一个家庭作业而且我被迫这样做 – Mark

回答

0

我认为如果你添加"data:image/png;base64," Base64字符串之前,你的问题可能会解决。所以试试这个:

params.put("image", "data:image/png;base64," + Base64.encodeToString(nImage,Base64.DEFAULT)); 
+0

没有工作我得到了 data:image/png; base64,后面跟着相同的数据 – Mark

相关问题