Google Documents List API文件上传400响应

时间:2012-06-25 14:54:54

标签: java google-docs-api apache-httpclient-4.x

我正在为Android编写自己的Google Drive客户端实现,而我正在使用docs list api。最近我遇到了以下问题:

起初我使用HttpURLConnection上传文件,但似乎在调用getResponseCose()之后将数据写入套接字,而不是在我写入连接的OutputStream时,这对我来说是必须的。

然后我切换到Apache HttpClient,但我仍然得到400响应,不知道为什么。也许你能够帮助我。以下是用于上传文件的代码。


String putUrl = conn.getHeaderField("Location");//from the previous request
final HttpClient client = new DefaultHttpClient();
final HttpPut put = new HttpPut(putUrl);

MultipartEntity entity = new MultipartEntity(HttpMultipartMode.BROWSER_COMPATIBLE);
put.addHeader("Content-Type", mime==null?"file":mime);
//put.addHeader("Content-Length", String.valueOf(length));
put.addHeader("Content-Range", "bytes 0-"+(length-1)+"/"+length);
put.addHeader("GData-Version", "3.0");
put.addHeader("Authorization", getAuthorizationProperty());
entity.addPart("content", new InputStreamBody(in, name));
put.setEntity(entity);

HttpResponse resp = client.execute(put);
int response = resp.getStatusLine().getStatusCode();
if(response == HttpStatus.SC_CREATED){
    lastCreated = parseSingleXMLEntry(resp.getEntity().getContent());
}

HttpURLConnection的标题完全相同。也许实体是错的?

1 个答案:

答案 0 :(得分:0)

好的,解决方案很简单,希望它对某人有用。

我必须删除为请求添加标头的所有行。之后我将mime类型添加到InputStreamBody构造函数并覆盖getContentLength()方法以提供流长度。最后它看起来像这样:

MultipartEntity entity = new MultipartEntity(HttpMultipartMode.BROWSER_COMPATIBLE);
entity.addPart("content", new InputStreamBody(in, ,mime, name){
     @Override
     public long getContentLength() {
          return length;
     }
});
put.setEntity(entity);

HttpResponse resp = client.execute(put);

就是这样。