编码图像以供URI使用

时间:2014-10-05 15:45:00

标签: android encoding base64 decoding

我正忙着一个小的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出现问题,因为它会选择/作为参数更改,从而认为它不是有效请求。有没有办法在不影响解码的情况下删除/,还是有更好的方法将图像转换为字符串并返回图像?

1 个答案:

答案 0 :(得分:1)

如果您可以控制服务器端,我至少可以考虑两个选项:

1)在base64编码之后,将all / with _替换为url有效,没有特定的预分配含义,并且base64不使用它。在服务器端,您应用相反的替换;

2)这比选项1更直接,而不是get,你使用put或post。