我知道这个问题已经被问了很多次,但我真的有理解发生了什么存储在数据库中的图像,并检索它呼应的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
请帮助,如果你知道这个
和遗憾,对于长的问题什么...
谢谢为你的时间
你很容易受到[sql注入攻击](http://bobby-tables.com)。并且您的应用正在使用base64编码进行上传。 –
我知道... 我们只是在本地服务器上运行这个 – Mark
我稍后会正确上传mages ...它只是一个家庭作业而且我被迫这样做 – Mark