我正在尝试使用服务模块将图像文件从 android 设备上传到我的 drupal 网站
我可以成功登录:
HttpParams connectionParameters = new BasicHttpParams();
int timeoutConnection = 3000;
HttpConnectionParams.setConnectionTimeout(connectionParameters, timeoutConnection);
int timeoutSocket = 5000;
HttpConnectionParams.setSoTimeout(connectionParameters, timeoutSocket);
httpClient = new DefaultHttpClient(connectionParameters);
HttpPost httpPost = new HttpPost(serverUrl+"user/login");
JSONObject json = new JSONObject();
try{
json.put("password", editText_Password.getText().toString());
json.put("username", editText_UserName.getText().toString());
StringEntity se = new StringEntity(json.toString());
se.setContentType(new BasicHeader(HTTP.CONTENT_TYPE, "application/json"));
httpPost.setEntity(se);
//Execute HTTP post request
HttpResponse response = httpClient.execute(httpPost);
int status_code = response.getStatusLine().getStatusCode();
...
...
}
catch(Exception ex)
{
}
通过响应对象,我可以获得会话名称 session id 、用户 id 和许多其他信息。
登录后,我通过 HttpGet 对象自己没有设置会话信息,但使用相同的 DefaultHttpClient,我可以使用以下代码神奇地检索节点:
HttpGet httpPost2 = new HttpGet(serverUrl+"node/537.json");
HttpResponse response2 = httpClient.execute(httpPost2);
这让我想到,httpClient 对象自动为我存储了会话信息。因为如果我不先登录或使用新的 HttpClient 对象并尝试检索节点,我会收到 401 错误。
但是,当我在登录后尝试按如下方式上传图像文件时:
httpPost = new HttpPost(serverUrl+"file/");
json = new JSONObject();
JSONObject fileObject = new JSONObject();
fileObject.put("file", photodata); //photodata is a byte[] that is set before this point
fileObject.put("filename", "myfirstfile");
fileObject.put("filepath", "sites/default/files/myfirstimage.jpg");
json.put("file", fileObject);
se = new StringEntity(json.toString());
se.setContentType(new BasicHeader(HTTP.CONTENT_TYPE, "application/json"));
httpPost.setEntity(se);
//Execute HTTP post request
response = httpClient.execute(httpPost);
status_code = response.getStatusLine().getStatusCode();
尽管我已登录并使用相同的 HttpClient 对象,但出现 401 错误。
我也尝试添加:
httpPost.setHeader("Cookie", SessionName+"="+sessionID);
这又给了我 401 错误。
我也不确定我是否使用了正确的 url,因为我正在尝试使用 file.create 方法,但是将 url 写为“myip:myport/rest/file/create”会给出错误的地址。我的目标是将图像上传到用户节点,所以我想在成功添加文件后,我会使用 node.create 对吗?
我希望有人能帮助我度过这个难关。