2014-10-05 79 views
1

我忙於一個小型的android應用程序。應用程序使用restful連接到WCF,然後連接到數據庫。該應用程序確實有效。現在我想將圖像發送到數據庫。使用URI編碼圖像

[OperationContract] 
[WebGet(UriTemplate = "sendImage/{seq}", ResponseFormat = WebMessageFormat.Json)] 
string sendImage(string seq); 

在Android應用程序中,我使用BASE64對圖像進行了編碼。

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

如果你有在服務器端控制,我至少可以想到的兩個選項:

1)base64編碼後,全部更換/與_,這是有效的URL,沒有特別的預分配意思,並且它不被base64使用。在服務器端,應用相反的替換;

2)這更直接,選項1,而不是得到,你使用put或post。

+0

謝謝,我沒有想到做選項二。比選項1的開銷少。 – Jonathan 2014-10-05 16:00:50