[英]Sending base64 encoded image to server using HttpUrlConnection Android
[英]Error While sending Json data to server with Base64 encoded image string
在我的代码中,我正在像这样发送json数据
ByteArrayOutputStream baos = new ByteArrayOutputStream();
imgbmp.compress(Bitmap.CompressFormat.PNG, 90, baos);
byte[] b = baos.toByteArray();
String encodedImage = Base64.encodeBytes(b);
jsonstr = new JSONStringer().object().key("Text")
.value(msg).key("Files").array().object().key(
"ContentType").value("image/png").key(
"Content").value(encodedImage)
.endObject().endArray().key("AuthToken").value(token)
.endObject();
StringEntity entity = new StringEntity(jsonstr.toString());
entity.setContentType("application/json;charset=UTF-8");
entity.setContentEncoding(new BasicHeader(HTTP.CONTENT_TYPE,"application/json;charset=UTF-8"));
request.setEntity(entity);
DefaultHttpClient httpClient = new DefaultHttpClient();
HttpResponse res = httpClient.execute(request);
并且我在执行HttpClient时收到此错误
09-30 11:56:21.571: INFO/Request(22161): org.apache.http.client.methods.HttpPost@468613b0
09-30 11:56:21.586: INFO/JSON ANS(22161): <Fault xmlns="http://schemas.microsoft.com/ws/2005/05/envelope/none"><Code><Value>Receiver</Value><Subcode><Value xmlns:a="http://schemas.microsoft.com/net/2005/12/windowscommunicationfoundation/dispatcher">a:InternalServiceFault</Value></Subcode></Code><Reason><Text xml:lang="en-US">The input is not a valid Base-64 string as it contains a non-base 64 character, more than two padding characters, or a non-white space character among the padding characters. </Text></Reason><Detail><ExceptionDetail xmlns="http://schemas.datacontract.org/2004/07/System.ServiceModel" xmlns:i="http://www.w3.org/2001/XMLSchema-instance"><HelpLink i:nil="true"/><InnerException i:nil="true"/><Message>The input is not a valid Base-64 string as it contains a non-base 64 character, more than two padding characters, or a non-white space character among the padding characters. </Message><StackTrace> at System.Convert.FromBase64String(String s)
09-30 11:56:21.586: INFO/JSON ANS(22161): at Zoodig.Core.WebServices.DataContracts.FileContract.GetStream()
09-30 11:56:21.586: INFO/JSON ANS(22161): at Zoodig.WebServices.Services.AthletesService.PostUpdate(PostUpdateContract data)
09-30 11:56:21.586: INFO/JSON ANS(22161): at SyncInvokePostUpdate(Object , Object[] , Object[] )
09-30 11:56:21.586: INFO/JSON ANS(22161): at System.ServiceModel.Dispatcher.SyncMethodInvoker.Invoke(Object instance, Object[] inputs, Object[]& outputs)
09-30 11:56:21.586: INFO/JSON ANS(22161): at System.ServiceModel.Dispatcher.DispatchOperationRuntime.InvokeBegin(MessageRpc& rpc)
09-30 11:56:21.586: INFO/JSON ANS(22161): at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage5(MessageRpc& rpc)
09-30 11:56:21.586: INFO/JSON ANS(22161): at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage41(MessageRpc& rpc)
09-30 11:56:21.586: INFO/JSON ANS(22161): at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage4(MessageRpc& rpc)
09-30 11:56:21.586: INFO/JSON ANS(22161): at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage31(MessageRpc& rpc)
09-30 11:56:21.586: INFO/JSON ANS(22161): at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage3(MessageRpc& rpc)
09-30 11:56:21.586: INFO/JSON ANS(22161): at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage2(MessageRpc& rpc)
09-30 11:56:21.586: INFO/JSON ANS(22161): at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage11(MessageRpc& rpc)
09-30 11:56:21.586: INFO/JSON ANS(22161): at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage1(MessageRpc& rpc)
09-30 11:56:21.586: INFO/JSON ANS(22161): at System.ServiceModel.Dispatcher.MessageRpc.Process(Boolean isOperationContextSet)</StackTrace><Type>System.FormatException</Type></ExceptionDetail></Detail></Fault>
请任何人都可以理解并告诉我这里发生了什么..我犯了任何错误的可能性在哪里..为什么我会出错?
谢谢。 MKJParekh
查看您的代码,您正在使用enimg
将图像数据添加到JSON中,而不是encodedImage
。 如果这是您的问题中的剪切和粘贴错误,那么我怀疑您的Base64编码中可能存在问题。 您是否尝试过使用android.util.Base64
的encodeToString()
方法代替?
即使您需要支持早于8的API版本,这也将证明这是否是Base64错误,并且一旦您确定将知道要解决的问题。
不要使用json传递文件/图像。 如果文件/图像很大,则会出现“内存不足”错误。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.