使用Json,Gson,InputStream和HttpPost将文件插入Mysql

时间:2015-06-19 05:57:12

标签: android mysql json http-post inputstream

我已经在android中有一个Camera应用程序,但现在我想将图像保存到Mysql。是否可以将Image转换为JsonObject然后转换为String。然后,通过Http Post发送字符串。然后将String转换为JSON,然后将File转换为InputStream。然后,将输入流保存到mysql。我知道这一刻有点混乱,但这只是一个想法。想问是否有可能

2 个答案:

答案 0 :(得分:0)

是的,这是可能的。

首先将图片转换为Base64

How to convert a image into Base64 string?

然后通过HttpPost发送。

How to send POST request in JSON using HTTPClient?

在服务器中,您需要将Base64字符串转换为图像并将其写入服务器上的物理位置。将图像的路径存储在数据库中。

Convert Base64 string to an image file?

除非您需要从服务器下载数据,否则我认为您不需要GSON库。

答案 1 :(得分:0)

实际上你想要的改变很小,首先是将图像转换为字符串然后转换为JSON对象。 这可能是一个漫长的过程,但我希望它会对你有所帮助。

如果您从资源中获取图像,请按照

进行操作
Bitmap bitmapImage = BitmapFactory.decodeResource(getResources(), R.drawable.image);
ByteArrayOutputStream baos = new ByteArrayOutputStream();  
bitmapImage.compress(Bitmap.CompressFormat.JPEG, 100, baos);
byte[] b = baos.toByteArray();
String imageStr = Base64.encodeToString(b,Base64.DEFAULT);

现在图像转换为字符串。 然后将字符串转换为JSON并通过HTTP Post发送。

HttpClient client=new DefaultHttpClient();
String url="Your url";
HttpPost httpPost=new HttpPost(url);
httpPost.setHeader("Content-Type", "application/json");
httpPost.setEntity(new StringEntity(buildRequest(imageStr)));


public String buildRequest(String imageStr){
 String jsonText="";
 try{
   JSONObject obj = new JSONObject();
   obj.put("imageStr", imageStr);
   jsonText=JSONValue.toJSONString(obj);
  }
  catch(Exception e){
     e.printStackTrace();
  }
  return jsonText;
}

这是发送端的代码。我用了json-simple-1.1.1.jar。 让我知道它是否有效。 如果您对MySql方面有任何疑问或想要代码也请问我。

对于服务器端,我使用了泽西RestFul服务。它对我帮助很大,因为我使用的是Mac OS。好吧,保留它,我认为以下代码可以帮助您将请求作为JSON OBJECT。

String jsonStr="";
while(scan.hasNext()){
    jsonStr+=scan.nextLine();
}
scan.close();
JSONObject obj=new JSONObject(jsonStr);
String imageStr=obj.getString("imageStr");
byte[] imageByteArray=Base64.decode(imageStr);

一旦你将图像作为字节获取,你可以直接将其插入到mysql中。请注意,列的类型应为BLOB类型。使用以下代码:

PreparedStatement pre = conn.prepareStatement("insert into TABLENAME values(?)");
pre.setBytes(1, imageByteArray);
records=pre.executeUpdate();

我认为它会起作用。但是,让我知道你得到了什么错误。实际上我使用Jersey框架成功实现了同样的功能。但我希望你能没有那个。谢谢。