我已经在android中有一个Camera应用程序,但现在我想将图像保存到Mysql。是否可以将Image转换为JsonObject然后转换为String。然后,通过Http Post发送字符串。然后将String转换为JSON,然后将File转换为InputStream。然后,将输入流保存到mysql。我知道这一刻有点混乱,但这只是一个想法。想问是否有可能
答案 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框架成功实现了同样的功能。但我希望你能没有那个。谢谢。