我正忙着一个小的Android应用程序。应用程序使用restful连接到WCF,而restful又连接到数据库。该应用程序确实有效。现在我想将一个Image发送到数据库。
[OperationContract]
[WebGet(UriTemplate = "sendImage/{seq}", ResponseFormat = WebMessageFormat.Json)]
string sendImage(string seq);
在android应用程序中,我使用BASE64编码一个Image。
Bitmap bm = BitmapFactory.decodeResource(getResources(), R.drawable.ic_launcher);
ByteArrayOutputStream baos = new ByteArrayOutputStream();
bm.compress(Bitmap.CompressFormat.JPEG, 100, baos); //bm is the bitmap object
byte[] b = baos.toByteArray();
String encodedImage = Base64.encodeToString(b, Base64.DEFAULT);
TextView textView = (TextView) findViewById(R.id.defaults);
textView.setText(encodedImage);
此加密确实有效。问题是我现在要将字符串encodedImage
发送到WCF以写入数据库。因此,字符串在URI中传递。
"htp://_____.__/serv/ManagementSystem.svc/sendImage/" + encodedImage
问题是我从编码中获得的字符串包含/
个字符。
/9J/DASDFkFASDF/.....
这会导致URI出现问题,因为它会选择/
作为参数更改,从而认为它不是有效请求。有没有办法在不影响解码的情况下删除/
,还是有更好的方法将图像转换为字符串并返回图像?
答案 0 :(得分:1)
如果您可以控制服务器端,我至少可以考虑两个选项:
1)在base64编码之后,将all / with _替换为url有效,没有特定的预分配含义,并且base64不使用它。在服务器端,您应用相反的替换;
2)这比选项1更直接,而不是get,你使用put或post。