首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >安卓改装Base64 @Body

安卓改装Base64 @Body
EN

Stack Overflow用户
提问于 2014-04-01 13:35:30
回答 1查看 8.7K关注 0票数 4

嗨,我在Android4.3中有这段代码,我刚才正在使用修改,但是服务器抛出了一条错误消息:“输入不是一个有效的Bas-64字符串,因为它包含一个非基本的64个字符,两个以上的填充字符,或者填充字符中的一个非法字符。”当我使用改装的时候

代码语言:javascript
复制
//Normal HttpClient
//Base64 String
photo = new String(b);

// Creating HTTP client
HttpClient httpClient = new DefaultHttpClient();

// Creating HTTP Post
HttpPut httpPut = new HttpPut("http://beta2.irealtor.api.iproperty.com.my.ipga.local/PhotoService/"
                    + mPropertyId + "/testWatermark"
            );

httpPut.setHeader("content-type", "application/x-www-form-urlencoded");
httpPut.setHeader("Authorization","WFdSeW8vTJ1Z3oQlBJMk53VGpaekZRY2pCd1pYSlVXU090");
httpPut.setHeader("Accept", "application/json");

httpPut.setEntity(new StringEntity(photo, "utf-8"));

HttpResponse response = httpClient.execute(httpPut);



//With retrofit
@Headers({
    "content-type:application/x-www-form-urlencoded"
})
@PUT("/PhotoService/{PROPERTYID}/{WATERMARK}") String uploadPhoto(
    @Body String photo,
    @Path("PROPERTYID") String propertyId,
    @Path("WATERMARK") String watermark);
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-04-01 22:54:19

对于一般对象类型(包括String),Retrofit将使用其Converter来序列化该值。在本例中,默认情况下使用Gson将主体序列化为JSON。

为了上传Base64 64编码的数据,您需要使用TypedInput。这将告诉Retrofit,您将传递给它已经序列化的原始主体和相关的Content-Type值。

代码语言:javascript
复制
@PUT("/PhotoService/{PROPERTYID}/{WATERMARK}")
String uploadPhoto(
    @Body TypedInput photo,
    @Path("PROPERTYID") String propertyId,
    @Path("WATERMARK") String watermark);

在上面的示例中,我将假设b是一个byte[]。这里我使用的是TypedInput的现有实现:TypedByteArray

代码语言:javascript
复制
TypedInput body = new TypedByteArray("application/x-www-form-urlencoded", b);
service.uploadPhoto(body, "...", "...");
票数 24
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22787585

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档